介绍

也叫 NTLM 重放攻击,NTLM 中继攻击。

漏洞点

这里要先了解 Windows系统名称解析顺序
当我们访问一个共享时 net use \aaa ,其寻找这个主机名称会遵循以下的步骤:

  1. 本地 hosts 文件( %windir%\System32\drivers\etc\hosts
  2. DNS 缓存/ DNS 服务器
  3. 链路本地多播名称解析( LLMNR )和 NetBIOS 名称服务( NBT-NS

如果没有在1、2项中找到对应名称,系统就会通过链路本地多播名称解析( LLMNR )和 Net-BIOS 名称服务( NBT-NS )在本地进行名称解析。这时,客户端就会将未经认证的 UDP 广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是这台机器。

因此当用户输入不存在、包含错误或者 DNS 中没有的主机名时,通过 Responder 工具( kali 自带)监听 LLMNRNetBIOS 广播,就可以伪装成受害者要访问的这台机器,并从而让受害者交出相应的登陆凭证。核心过程与 arp 欺骗类似,我们可以让攻击者作中间人,截获到客户端的 Net-NTLM Hash

注意 Net-NTLM HashNTLM Hash 加密的规则不一样,因此不能用 Net-NTLM Hash 去使用哈希传递攻击,但是它们原文中都包含用户的登录密码,因此被破解后都可以得到受害者的登录密码。

攻击前提

如果被攻击主机开启了 SMB 签名,被攻击主机就会验证攻击机的身份,因此就无法使用这个攻击,不过域内用户是默认关闭 SMB 签名的,域控是默认开启 SMB 签名的。

攻击实验

先要准备 Responder 工具。

https://github.com/lgandx/Responder

这个工具中在 kali 中也有,在 /usr/share/responder 目录。不过重新下载,使用新版的会更好。

方式一:破解Net-NTLM Hash

使用 Responder 工具监听被攻击机所在网络的广播信息。

1
sudo responder -I eth0

之后在被攻击机上模拟发起 NTLM 请求

1
net use \\aaaa\bbb

responder 就会截获被攻击机的数据包,然后伪装自己是被攻击机要访问的机器,从而索取被攻击机的 Net-NTLM Hash

然后执行下面的操作破解 Hash

1
2
3
4
# 将历史捕捉到的Hash都再次Dump出来,然后存到DumpNTLMv1.txt和DumpNTLMv2.txt
python DumpHash.py
# 使用john命令来破解Net-NTLM Hash
john DumpNTLMv2.txt

方式二:重放Net-NTLM Hash

上面的方式一需要暴力破解 Hash ,难度往往较大,这里可以考虑使用重放攻击。

重放到SMB利用

NTLM 重放到 SMB 利用需要被攻击主机关闭 SMB 签名,因此我们先通过 Responder 工具的 tools 目录里的 RunFinger.py 工具来看一下某个网段的主机是否开启了 SMB 签名(对应下图中的 Signing 字段)。

1
python RunFinger.py -i 192.168.163.0/24

这里需要重放的 Net-NTLM Hashadministrator 的才行,不然别的机器也不会让你访问。

先修改 Responder.conf ,将其中的 SMBHTTP 修改为 Off

然后在两个不同的终端分别执行下面两个命令。 MultiRelay.pytools 目录下。

1
2
sudo responder -I eth0
python MultiRelay.py -t 192.168.163.140 -u ALL

然后在某个主机用管理员权限执行 net use \\aaa\bb ,攻击机 kali 就会截获其 Net-NTLM Hash ,然后 MultiRelay.py 就会将其重放给 192.168.163.140 这个机器,如果成功了在运行 MultiRelay.py 的终端就会得到 140 这台机器的 shell ,从而拿下 140 这台主机。

其它

类似地,使用 NTLM 认证的服务有很多,我们还可以重放 Net-NTLMExchangeLDAPAD CS 来利用,这里就不细说了。最常用的还是重放到 SMB

实战利用

上面的攻击最关键的前提是域内有主机发起了 NTLM 请求,所以在实战中通过钓鱼诱导域内人员发起 NTLM 请求很关键。在 Windows 中,通过设置指向恶意服务器的 UNC 路径,能够使受害机使用当前用户凭证向恶意服务器发起 NTLM 认证。这里概括介绍几种常用的诱导方法。

  1. 执行会发起 NTLM 请求的命令。(不过可能性比较小)
  2. 利用 desktop.ini 文件,修改其 IconResource 属性(文件夹的图标路径)为指向恶意服务器的 UNC 路径,从而域内用户一访问此文件夹就会自动发起 NTLM 请求。类似的还有 SCF 文件,PDF 文件,Office 文档。
  3. 利用 XSS 漏洞发起 NTLM 请求。
  4. 利用 SQL 注入发起 NTLM 请求。

参考文章

https://xz.aliyun.com/t/12627
https://www.freebuf.com/articles/system/194549.html