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
2
3
D:\>nslookup
>server 目标DNS服务器地址
>ls 目标域名

如果不存在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