7.4 KiB
5353/UDP 多播 DNS (mDNS) 和 DNS-SD
从零到英雄学习 AWS 黑客技术 htARTE (HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您想在 HackTricks 中看到您的公司广告 或 下载 HackTricks 的 PDF,请查看 订阅计划!
- 获取 官方 PEASS & HackTricks 商品
- 发现 PEASS 家族,我们独家的 NFT 集合
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上 关注 我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PR 来分享您的黑客技巧。
基本信息
多播 DNS (mDNS) 是一种零配置协议,允许您在没有传统单播 DNS 服务器的情况下,在本地网络上执行类似 DNS 的操作。该协议使用相同的 API、数据包格式和操作语义作为 DNS,允许您在本地网络上解析域名。DNS 服务发现 (DNS-SD) 是一种协议,允许客户端使用标准 DNS 查询在域中发现服务的命名实例列表(例如 test._ipps._tcp.local 或 linux._ssh._tcp.local)。DNS-SD 最常与 mDNS 一起使用,但不依赖于它。它们都被许多物联网设备使用,如网络打印机、苹果电视、谷歌 Chromecast、网络附加存储 (NAS) 设备和摄像头。
默认端口: 5353/UDP
PORT STATE SERVICE
5353/udp open zeroconf
mDNS的工作原理
当本地网络缺少传统的单播DNS服务器时,设备使用mDNS。要使用mDNS解析本地地址的域名,设备会向多播地址224.0.0.251(IPv4)或FF02::FB(IPv6)发送以**.local结尾的DNS查询域名**。您也可以使用mDNS解析全局域名(非.local的),但mDNS实现默认应该禁用此行为。mDNS请求和响应使用UDP和端口5353作为源端口和目的端口。
mDNS回复包含几个重要的标志,包括一个生存时间(TTL)值,表示记录有效的秒数。发送TTL=0的回复意味着相应的记录应该被清除。另一个重要的标志是QU位,它表示查询是否为单播查询。如果QU位未设置,数据包是一个多播查询(QM)。因为有可能在本地链路之外接收到单播查询,安全的mDNS实现应始终检查数据包中的源地址是否与本地子网地址范围匹配。
DNS-SD的工作原理
DNS-SD允许客户端发现网络上可用的服务。为了使用它,客户端发送标准DNS查询以获取指针记录(PTR),这些记录将服务类型映射到该类型服务的特定实例的名称列表。
要请求PTR记录,客户端使用"<Service>.<Domain>"的名称形式。<Service>部分是服务名称前面加上"_"(例如,_ipps、_printer或_ipp)以及_tcp或_udp。<Domain>部分是".local"。
响应者然后返回指向相应服务(SRV)和文本(TXT)记录的PTR记录。以下是PTR记录的一个例子:
_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local
PTR 记录中冒号左边的部分是它的名称,而右边的部分是 PTR 记录指向的SRV 记录。SRV 记录列出了可以访问服务实例的目标主机和端口。例如,下图显示了 Wireshark 中的 "test._ipps._tcp.local" SRV 记录,主机为 ubuntu.local,端口为 8000:
因此,SRV 记录的名称类似于PTR 记录,之前由**<Instance>** 名称(本例中为 test)前置。TXT 记录与SRV 记录同名,包含在 IP 地址和端口号(包含在 SRV 记录中)不足以识别服务时所需的信息。
枚举
nmap
nmap -Pn -sUC -p5353 192.168.1.2
Starting Nmap 6.46 (http://nmap.org) at 2015-01-01 10:30 GMT
Nmap scan report for 192.168.1.2
PORT STATE SERVICE
5353/udp open zeroconf
| dns-service-discovery:
| 9/tcp workstation
| Address=192.168.1.2
| 22/tcp ssh
| Address=192.168.1.2
| 22/tcp sftp-ssh
| Address=192.168.1.2
| 445/tcp smb
| Address=192.168.1.2
网络枚举
通过简单地发送mDNS请求和捕获多播mDNS流量,您可以了解本地网络的许多信息。
您可以使用工具 Pholus 在本地网络上发送mDNS请求(-rq)并捕获多播mDNS流量(对于-stimeout 10秒):
sudo python3 pholus3.py eth0 -rq -stimeout 10
攻击
滥用 mDNS 探测阶段
当 mDNS 响应器启动或更改其连接性时,它会询问本地网络是否有计划使用的任何资源名称。如果答案包含了相关记录,探测主机应选择一个新名称。如果在10秒内发生15次冲突,主机必须至少等待五秒钟才能进行任何额外尝试。此外,如果在一分钟内主机找不到未使用的名称,它会向用户报告一个错误。
以下命令行将阻止任何新设备获取任何新名称,因为它会指示任何名称已经被占用:
sudo python pholus.py eth0 -afre -stimeout 1000
欺骗/中间人攻击
您可以对此服务执行的最有趣的攻击是在客户端与真实服务器之间的通信中执行中间人攻击。您可能能够获取敏感文件(中间人攻击与打印机的通信)或甚至凭据(Windows认证)。
有关更多信息,请查看:
{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}
参考资料
通过 htARTE (HackTricks AWS 红队专家)从零开始学习 AWS 黑客攻击!
支持 HackTricks 的其他方式:
- 如果您希望在 HackTricks 中看到您的公司广告 或 下载 HackTricks 的 PDF 版本 请查看 订阅计划!
- 获取 官方的 PEASS & HackTricks 商品
- 发现 PEASS 家族,我们独家的 NFTs 集合
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上 关注 我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。