细化总结,包括DNS、证书和枚举工具的具体原理,泛解析问题的解决和对抗策略,优秀的收集和监控子域名工具推荐等。
Windows下的漏洞利用如上图所示,图源网络。
DNS区域传送(DNS transfer)指后备DNS服务器从主服务器获取数据,以更新自己的zone数据库。这可以防止因主DNS服务器故障造成的业务中断,为DNS服务提供了冗余备份。但是许多DNS服务器却被错误配置成只要收到AXFR请求,就向对方进行域传送。
当存在这种错误配置时,攻击者就可以获取整个域的所有记录,造成整个网络架构泄露。正确的配置包括
allow-transfer {ipaddress;}; 通过ip限制可进行域传送的服务器
allow-transfer { key transfer; }; 通过key限制可进行域传送的服务器
Windows下对漏洞的利用归纳起来就是:
Linux下只需要一条dig命令,对DNS服务器尝试AXFR请求:
dig @1.1.1.1 0sec.com.cn axfr
Kali下可以使用dnswalk获取对象全部的DNS 解析记录信息,注意域名后有一个点:
除此之外nmap也有扫描的脚本:
nmap --script dns-zone-transfer --script-args dns-zone-trans
fer.domain=0sec.com.cn -p 53 -Pn dns30.hichina.com
最后来看两个以前乌云上的案例(镜像站):
从DNS获取子域名,当然也有这一种方法。就是枚举子域名,并从DNS服务器查找是否存在解析记录:
dig tools.0sec.com.cn
有人可能会想到,为什么不直接枚举后做http request,然后查看响应码呢?我认为也可以,但是子域名可能存在未上线/拒绝访问/服务宕机/状态码无法判断/泛解析等一系列问题,所以相比之下还是查询解析记录更加直观。
枚举子域名的方法会在下文提到。
根据我的理解,我们无法直接从浏览器证书中查看到子域名信息,从证书信息获取子域名有这两种方法:
像Censys这样的网络空间资产搜索引擎,它的接口允许在证书中搜索关键字:
https://censys.io/certificates?q=0sec.com.cn
site:0sec.com.cn
其中Sublist3r作为常用的子域名枚举工具,它的子域名枚举来源也包括搜索引擎、crt.sh(类似Censys的证书关键字搜索)等。同时Sublist3r也使用了Subbrute,后者是通过字典进行枚举的。
泛解析是对抗子域名挖掘的思路。
类似扫描器开发时,对404页面的处理方法,通过绝对不存在的子域名的页面返回,计算相似度。来看p0desta的文章:
使用绝对不存在的页面时,需要判断多个DNS解析的IP,防止因为出口线路不同造成的泛解析误判。
Python开发,通过证书/DNS/爬虫/威胁情报/搜索引擎 收集,支持子域名爆破(判断泛解析)和多线程调用等。
监控证书,在VPS上搭建服务端后,可将新监控到的子域名推送到Slack工作区,实现发现新上线业务的功能,方便Bug bounty。
参考链接:
https://larry.ngrep.me/2015/09/02/DNS-zone-transfer-studying/