浅析DNS域传送漏洞
/0x00 前言
环境参考:https://vulhub.org/#/environments/dns/dns-zone-transfer/
0x01 DNS域传送漏洞
DNS域传送
DNS主备服务器会通过DNS域传送来进行数据库的同步。域传送是指后备服务器从主服务器复制数据,并用得到的数据更新自身数据库。
DNS域传送漏洞
DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题。如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞,也就是说,攻击者可以利用这个漏洞来获取该DNS中记录的敏感信息。
检测方法
通过dig检测
在Linux下,可以使用dig命令来发送DNS请求。
发送axfr类型的DNS请求,注意要查询的域名前面无需带子域名如www:
1 | dig @目标DNS服务器ip axfr 查询的域名 |
其中@指定DNS服务器;axfr(Authoritative Transfer的缩写)是q-type类型的一种、指请求传送某个区域的全部记录。
发送一个axfr请求来欺骗DNS服务器,如果该DNS服务器上存在该漏洞,就会返回所有的解析记录值。
看下Vulhub的环境吧。
运行了漏洞靶机后,docker容器的53端口和宿主机是绑定的,也就是说这个存在域传送漏洞的DNS服务器写宿主机的IP即可。
正常来说,dig解析vulhub.org域名结果如下,其中指定8.8.8.8的DNS服务器是不存在域传送漏洞的:
然后,指定为存在域传送漏洞的DNS服务器进行再次查询,看到是完全返回该漏洞DNS服务器中保存的目标域的所有敏感信息,包括所有子域、A记录、CNAME等等:
通过nslookup检测
在Windows下的nslookup命令可以先指定目标DNS服务器地址、再使用ls命令来检测是否存在DNS域传送漏洞。
1 | D:\>nslookup |
如果不存在DNS域传送漏洞则输出如下:
在Linux中可以进行如下操作来检测。
默认查询域名的子域名信息,返回未授权的回应:
如果指定了存在DNS域传送漏洞的DNS服务器,再次查询目标域名的子域名信息时就会直接返回回来:
通过Nmap检测
使用DNS域传送脚本检测:
1 | nmap -script dns-zone-transfer -script-args dns-zone-transfer.domain=xxx.yyy.com -p 53 -Pn dns.xxx.yyy.com |
通过dnsrecon检测
1 | dnsrecon -d example.com |
通过dnsenum检测
dnsenum默认包含自动检测域传送漏洞:
1 | dnsenum example.com |