内网渗透中的 Net-NTLM Relay Attack
Net-NTLM Relay Attack
漏洞原理
在看 Net-NTLM Relay Attack 之前,需了解一下攻击原理是怎样实现的。
Net-NTLM Relay 原理,它是发生在 NTLM 认证的第三步,客户端发送使用服务端 NTLM Hash 加密的 Challenge 值,得到 Net-NTLMHash。我们就是要重放这个 Net-NTLMHash 来进行攻击。
所以,进行NTLM Relay攻击的第一步我们首先要获得这个Net-NTLMHash值。那么如何能获得这个Net-NTLMHash值呢?思路是让受害者把 Net-NTLMhash 自己发送给攻击者,也就是说只要是使用 SMB、HTTP、LDAP、MSSQL 等协议来进行 NTLM 认证的程序,都可以尝试用来向攻击者发送 Net-NTLM hash(思路很多,实际情况灵魂运用)。
通过 SMB 来进行 Relay Attack
SMB 协议的 Relay攻击,可直接 Relay 到 smb 服务器,是最直接最有效的方法。
通过 SMB Relay Attack 我们可以在目标远程服务器上执行命令,上传我们的恶意 exe ,又或者到远程服务上执行恶意代码 ... 等等
而 Relay Attack 有两种场景:
1:工作组环境
在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码 Hash 只是保存在自己的 SAM 文件中,这个时候 Relay 到别的机器可能性就不大,除非两台机器的账号密码一样,不然毫无意义。
2:域环境
我们知道在域环境下所有域用户的账号密码 Hash 都保存在域控的 ntds.dit 里面。若没有限制域用户登录到某台机子,那就可以将该域用户 Relay 到别人的机子,或者是拿到域控的请求,将域控 Relay 到普通的机子,比如域管运维所在的机器。
PS:域环境下域控默认开启 smb 签名
下面演示在域环境下进行 Relay Attack,将会使用几款工具在域环从域控 relay 到普通域机器执行命令等操作。
当前环境
通过 impacket 下的 smbrelayx.py 进行 Relay Attack
1、在红队人员 VPS 上执行如下命令监听 80 和 445 端口,伪造 http 和 smb 服务:
#SMBRelay 攻击 192.168.0.128 主机,并执行 whoami 命令
python3 smbrelayx.py -h 192.168.0.128 -c whoami
2、通过钓鱼或者其他手段诱导域管理员或域用户访问了红队人员伪造的 HTTP 或 SMB 服务,访问 http://192.168.0.175 ,并输入账号密码进行认证:
3、此时就 Relay 成功获取到 192.168.0.128 的 system 权限(当然只是 whoami 命令,实战中可以直接远程加载 powershell 或者其他手段反弹 Shell 到 C2,在这里就不多阐述)
通过 impacket 下的 ntlmrelayx.py 进行 Relay Attack
1、在红队人员 VPS 上执行如下命令监听 80 和 445 端口,伪造 http 和 smb 服务:
# SMBRelay 攻击 192.168.0.128 主机,并执行 whoami 命令
python3 ntlmrelayx.py -t smb://192.168.0.128 -c whoami -smb2support
2、通过钓鱼或者其他手段诱导域管理员或域用户访问了红队人员伪造的 HTTP 或 SMB 服务,访问 http://192.168.0.175 ,并输入账号密码进行认证:
或者让域控随便访问一个资源使用 smb 触发:(因为它会检查本地 host 文件,然后检查 DNS,如果都不存在,就会通过 LLMNR 协议进行多播,在局域网中进行搜索。此时可以在攻击机上看到 Responder 的响应,然后受害者的 Windows 机器会向攻击者进行身份验证)
3、此时就 Relay 成功获取到 192.168.0.128 的 system 权限:
结尾
在内网渗透中若利用 LLMNR/NetBIOS 劫持成功并获得了目标主机的 Net-NTLM Hash,我们可以进行爆破,但是需要有一个强大的字典,否则你很难得到明文密码。
由于 Net-NTLM Hash 不像 NTLM-Hash,我们不能用 Net-NTLM Hash 来进行 Pass The Hash。那么不妨试一下 NTLM Relay Attack。