少女祈祷中...

LLMNR、NetBIOS、MDNS 本质是对DNS的扩充,应用在内网中的DNS解析(局域网内未得到DNS响应等场景)

LLMNR\NetBIOS\MDNS欺骗是中间人攻击,适合来获取凭证,如Net-NTLM Hash的获取 ,所以单独

开了一篇来学习,不过Responder 已经集成了各种服务场景下的LLMNR\NetBIOS\MDNS 欺骗

LLMNR

​ LLMNR(Link-Local Multicast Name Resolution) 是用于同一本地链路上的,基于DNS协议的一个协议,同一局域网中的主机可通过该协议去解析其他主机名

是一种用于在局域网中解析主机名到IP地址的协议。它通常用于替代基于DNS的主机名解析,特别是在没有DNS服务器或者DNS服务器不可用的情况下。(如小型局域网没有搭建专门的DNS服务器)

​ 从 Windows Vista 开始支持 LLMNR ,Linux 系统也通过 systemd 实现了此协议,同时 LLMNR 也支持 IPv6。

现在机器解析域名,查询顺序如下:

  1. 本地hosts 文件解析
  2. 使用DNS解析
  3. 使用LLMNR解析
  4. NetBIOS名称服务(NBT-NS)
  5. mDNS解析

LLMNR解析过程:

  1. 先检查本地NetBios缓存
  2. 没有则向IPv4的组播地址224.0.0.252(IPv6的组播地址ff02::fb)组播LLMNR协议数据包
  3. 收到该广播的数据包,若是要找的主机,则向广播主机单播一个返回数据包

组播:224.0.0.0/4 是保留给多播通信的地址范围,其中 224.0.0.0 到 224.0.0.255 是局部网络控制多播地址,它们用于在本地网络中传输控制消息,不能被路由器转发到其他网络

LLMNR协议工作在UDP 5355端口

LLMNR(Link-Local Multicast Name Resolution)主要适用于以下几种场景和应用环境:

  1. 小型网络环境:
    • LLMNR最常见的应用场景是在小型局域网中,例如家庭网络、小办公室网络或者少量设备组成的网络环境。在这些环境中,通常没有专门的DNS服务器,LLMNR可以提供一种简单而有效的主机名解析和服务发现机制。
  2. 无线局域网(Wi-Fi):
    • 在无线局域网中,LLMNR能够帮助设备发现并解析其他设备的主机名,例如打印机、共享文件夹或其他网络服务。这对于用户来说提供了更方便的使用体验,无需依赖静态IP地址或复杂的网络配置。
  3. 临时网络配置:
    • 在临时或临时性质的网络配置中,比如在展览会、会议或其他临时集会中,LLMNR可以帮助设备快速地发现并与其他设备进行通信,而无需事先配置复杂的网络参数。
  4. 无法连接到正常DNS服务器的情况:
    • 当设备无法连接到正常的DNS服务器时,例如因为网络故障或DNS服务器不可用,LLMNR可以作为一种备用的名字解析机制,仍然允许设备间进行基本的主机名解析和服务发现。
  5. 零配置网络(Zero Configuration Networking):
    • LLMNR常被用作零配置网络中的一部分,这种网络使设备可以在不需要手动配置的情况下自动发现和交互。它与其他零配置技术如Bonjour(mDNS)结合使用,为设备提供全面的自动化网络体验。

这种就跟ARP协议非常的相像,也容易遭受中间人攻击

LLMNR的欺骗手段和ARP欺骗差不多

​ 首先,LLMNR是UDP进行广播,所以不需要先ARP欺骗监听流量

​ 其次,由于它基于DNS协议,所以结构也与DNS相近,也就是说需要LLMNR广播包的特征码来构造响应包,才会接受响应。

​ 能触发LLMNR协议的主要就是smb共享,或者ping这种,只要基于链路层的访问就有机会用到LLMNR去解析

但是由于毒化后对方要使用链路层服务才会起作用,所以smb共享是主要方式

在触发LLMNR协议进行广播后,就需要做出响应来进行欺骗

对方将接收到的响应包中的地址作为要解析的地址,写入NetBios缓存。在访问对应的内网服务时候就被解析到了攻击者的地址上。

看到另外一位师傅的陈述:

我们甚至不需要对方去触发LLMNR广播查询,只要我们模拟受害者ip向局域网组播了查询数据包(对方至少得加入广播组),再把响应数据包发给受害者,就能实现LLMNR毒化。但是似乎在每次使用链路层服务时都会寻找,不管之前是否有查找过。(另外写脚本的时候也碰到了一点问题,用socket发送数据包的话,如果要设置UDP广播就无法设置从数据包中读取IP头,即伪造对方IP和发送广播包两者不能共存,不知道是不是写法的问题,网上也没找到有办法。)

最好的毒化方法就是像responder那样监听广播中的LLMNR广播数据包,再进行单播欺骗。

(llmnr实在很少使用,正常的局域网中要连接其他局域网内主机都直接用dns完成了,像llmnr大概只能去查询一些刚加进局域网,还未来得到和dns服务器交互,且存在于组播中的主机,所以要完成欺骗也要一点社工手段使对方使用llmnr服务)

这里可以研究一下,怎么写脚本构造数据包

NetBIOS

Netbios(Network Basic Input Output System):网络基本输入输出系统,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。严格来说,Netbios是一种应用程序接口(API)

​ 系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,几乎所有的局域网都是在NetBIOS协议的基础上工作的。NetBIOS名也是计算机的标识名称,主要用于局域网内计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程。在Windows操作系统中,默认情况下在安装 TCP/IP 协议后会自动安装NetBIOS。

服务类型:

根据上图,可以看到三种服务:

服务类型 端口 具体描述
NetBIOS name(NetBIOS名称服务) UDP 137 鉴别资源。程序、主机都有独特的NetBIOS名称
NetBIOS datagram(NetBIOS数据报服务) UDP 138 无连接地数据报发送到特定的地点、组、整个局域网
NetBIOS session (NetBIOS 会话服务) TCP 139 提供面向连接、可靠、完全双重的信息服务

NetBIOS name 为其他两个服务的基础。

上面提到过DNS解析失败后会经过Net-BIOS名称服务(NBT-NS\NBNS)在本地进行名称解析

NBNS:

NetBios names 负责对netbios名字和ip之间进行相互的解析 类似于dns
计算机名称到IP地址的管理方式

工作方式:

  • 位于同一工作组的电脑之间利用广播功能进行计算机名的管理
    电脑在启动或者是联网的时候,会查询在局域网下是否是存在具有相同的NetBios名称的主机
  • 利用WINS(Windows 因特网名称服务)管理NetBios名称
    WINS服务器用于记录计算机NetBios名称和IP地址的对应关系,供局域网计算机查询,系统启动的时候会将自己的NetBios名称和IP地址的对应发送给WINS服务器
  • 类似于DHCP分配IP地址,第二种里面说的WINS服务器就类似于DNS服务器,将NetBios的名称和ip之间相互对应

简单来说,一般计算机都有一个NetBIOS名,NBNS就在局域网内查询解析到对应NetBIOS名的主机

数据包:

相关命令

NBTSTAT列出来指定名称的名称和IP以及会话表等等  
NBTSTAT -A ip地址 查询该IP所对应的NetBios名称,命令的本质是向该IP地址对应的137端口发送查询的信息
nbtstat -c 进行查看缓存
Add name
Add group name
Delete name
Find name

渗透中的应用

使用其进行信息收集:

windows:

nbtstat -n 
nbtscan

查看本地的缓存的netbios 表

Linux:

使用nmap进行扫描,扫描的是udp 137端口 NetBIOS name 服务

nmap -sU --script nbstat.nse -p137 192.168.1.0/24 -T4

MDNS

​ 是一种类似于LLMNR的协议,用于解析本地域名到IP地址。它也用于设备发现和服务发现,特别是在局域网内。

​ 在没有标准DNS服务器的环境中,mDNS允许设备通过查询多播地址224.0.0.251(IPv4)或FF02::FB(IPv6)来解析以.local结尾的域名。mDNS的重要方面包括一个生存时间(TTL)值,指示记录的有效性,以及一个QU位,用于区分单播和多播查询。在安全方面,mDNS实现必须验证数据包的源地址是否与本地子网一致。

使用端口:UDP 5353

工作原理:

(1)设备使用多播地址发送mDNS查询,通常在UDP端口5353上。
(2)其他设备可以回复mDNS响应,提供所需的服务或资源的IP地址

也就是当解析不到域名(如test) 的时候,会向局域网组播(test.local)等待其他主机响应

组播地址稍微与LLMNR不一样

数据包如下:

Spoofing Attack 欺骗攻击

有时候可以称之为Poisoning Attacks 投毒攻击

Responder

这里欺骗使用现成的工具:Responder

https://github.com/lgandx/Responder

主要作用还是来获取Net-NTLM Hash

原理:使用LLMNR\NBT-NS\MDNS 欺骗, 在使用SMB解析不存在的域名时,使其指向我们的攻击机,

在伪造的SMB服务上获取Net-NTLM Hash

kali自带,但是需要监听网卡,所以将kali与受害者放置在同一个局域网

responder -I eth0 -A

-I :指定网卡

在受害机器上面执行,触发SMB (当然假如我们拿下了受害者机器,如果没有拿下可能就要使用一些社工手段让对方执行)

net use \\yyjccc

在攻击机上面就能捕获到Net-NTLM Hash

msf

1.欺骗

auxiliary/spoof/nbns/nbns\_response

2.捕获

use auxiliary/server/capture/http\_ntlm
use auxiliary/server/capture/smb

还有很多协议 的欺骗和投毒:https://www.thehacker.recipes/ad/movement/mitm-and-coerced-authentications/wpad-spoofing

防御

  1. 禁用NetBIBOS和LLMNR

NetBIBOS:本地连接 → 属性 → Internet协议版本4(TCP/IPv4) → 属性 → 高级

LLMNR:本地计算机策略 > 计算机配置 > 管理模板 > 网络 > DNS客户端 -> 关闭多播名称解析 ->启用

2.设置端口访问策略

防火墙直接禁用端口流量

TCP 139、TCP 5355 和 UDP 5355等等

或者将默认端口改成一些不会引起攻击者注意的高端口,即将端口重定向。这种重定向的方法修改注册表里面的PortNumber修改即可

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp]

给这几个端口配置IPsec安全策略

Reference