8.1 KiB
5353/UDP 多播 DNS (mDNS) 和 DNS-SD
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家 网络安全公司 工作吗?你想在 HackTricks 中看到你的 公司广告 吗?或者你想获得 PEASS 的最新版本或下载 HackTricks 的 PDF 版本 吗?请查看 订阅计划!
-
发现我们的独家 NFTs 集合 The PEASS Family
-
加入 💬 Discord 群组 或 Telegram 群组 或 关注 我的 Twitter 🐦@carlospolopm.
-
通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。
基本信息
多播 DNS (mDNS) 是一种零配置协议,允许你在没有传统单播 DNS 服务器的情况下,在本地网络上执行类似 DNS 的操作。该协议使用与 DNS 相同的 API、数据包格式和操作语义,允许你解析本地网络上的域名。DNS 服务发现 (DNS-SD) 是一种协议,允许客户端使用标准 DNS 查询在域中发现命名的服务实例列表(例如 test._ipps._tcp.local 或 linux._ssh._tcp.local)。DNS-SD 最常与 mDNS 结合使用,但并不依赖于它。它们都被许多物联网设备使用,例如网络打印机、Apple TV、Google 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中主机ubuntu.local和端口8000上的“test._ipps._tcp.local” SRV记录:
因此,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 %}
参考资料
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想要访问PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFT收藏品——The PEASS Family
-
加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享您的黑客技巧。