0x01 介绍

子域名枚举是为一个或多个域找到有效的(可解析的)子域的过程。除非DNS服务器公开完整的DNS区域(通过AFXR),否则很难获取现有的子域名列表。通常的做法是使用通用名称字典,来试图枚举它。虽然这种方法在某些正常的情况下有效,但它不包括具有奇怪名称的子域名。另一种方法是抓取二级域以便查找到子域名的链接(更快的方法是直接使用搜索引擎)。

子域名枚举是渗透测试中侦察阶段的重要组成部分。网络攻击者绘制目标的数字足迹,以找到弱点,例如访问内部网络。

示例: 完成子域名枚举过程后,攻击者将查找blog.example.com目标DNS区域中的子域之一。攻击者测试发现到的Web应用层,并发现博客正在使用Wordpress作为内容管理系统。攻击者然后运行wpscan以找到Wordpress漏洞。幸运的是,目标的Wordpress使用了一个存在漏洞的插件,攻击者可以利用它,获得对网站后台的访问权限,再进一步转移到内部网络中。这个例子可能看起来有点夸张,但是,这正是“巴拿马文件”案中发生的

我们这里介绍了最流行的开源工具和技术来进行子域名枚举。开始了:

0x02 区域(Zone)传输

最简单和最基本的技术是直接在DNS服务器上尝试AXFR请求:

dig @ns.example.com example=.com AXFR

区域传输用于在主DNS服务器和辅助DNS服务器之间的区域内容传输。这里建议一个个人觉得最好的方法:管理员仅允许来自授权DNS服务器的AXFR请求,这样上述的技术就可能无法正常工作了。但如果是这样,你就发现了一种金矿

类似于区域传输,有一个NSEC-walking攻击,它用于列举DNSSEC签名区域。

0x03 Google Dorking

学习如何使用Google!你可以使用各种运算符来优化搜索查询(我们也将这些查询称为“Google dorks”)。如前所述,可以使用各种语法对目标进行查找来找到它的子域名。但是Google(以及像Bing这样的其他搜索引擎)只能作为主要途径的副产品。我们可以在Google使用site目标域名来查找发现的所有子域:

site:example.com

0x04 Rapid7 DNS dataset

Rapid7在scanner.io存储库中公开提供了其Forward DNS研究/数据集。DNS数据集主要是寻找Internet上发现的所有域。虽然Rapid7做得很好,但这份清单也绝对不完整的。你还可以在这里阅读更多关于他们如何编译他们的数据集的文档。下载最新的快照后,我们可以运行jq来查找子域名:

zcat snapshop.json.gz | 
jq -r 'if (.name | test("\\.example\\.com$")) then .name else empty end'

jq测试以“ ending with .example.com”的正则表达式,来查找数据集中的所有子域名。DNSDumpster也是一种免费的在线服务,我也正在使用这种技术。

0x05 Subject Alternative Name

Subject Alternative Name(SAN)是x.509证书中的扩展,以在一个证书中提供主题的不同名称。公司经常为多个子域名生成一个证书来节省资金。

我们可以使用两种不同的方法查看证书寻找SAN中的子域名:

Censys.io

Censys.io是scan.io发布的数据集的接口。很重要的是,它允许在证书中搜索关键字,从而可能找到新的子域名:

https://censys.io/certificates?q=.example.com

Crt.sh

Crt.sh是由COMODO提供的证书搜索在线服务。它使用与Censys不同的数据集,但原理是一样的:在证书中找到子域。

https://crt.sh/?q=%25.example.com

值得注意的是,尽管一些域名对NXDOMAIN做出了响应,但它们仍然可能存在于内部网络上。管理员有时会在内部网服务器上重用公用服务器的证书…

0x06 Sublist3r

用于子域名枚举的工具中最受欢迎的开源工具之一就是Sublist3r。它汇总了许多不同来源的输出,包括:

这些数据在大多数情况下是正确的,但也可能会遇到不可解析的子域(使用NXDOMAIN响应的域)。这是因为Sublist3r很大程度上依赖于被动数据,并且不能验证发现的子域是否真的存在。

Sublist3r还使用一个名为Subbrute的独立项目。Subbrute使用通用子域名的字典,以便找到可解析的子域名子集。

要使用它,简单运行:

python sublist3r.py -d example.com

它本身还自带example.com的子域名列表。

0x07 theHarvester

另一个开源智能搜集工具,被称为theHarvester,这个工具主要是在在目标域以及子域和虚拟主机上找到电子邮件地址。与Sublist3r相比,它只提供了少量的子域名结果。你可以使用以下命令运行theHarvester:

python theHarvester.py -d example.com -b all

0x08 Smart DNS Brute-Forcer (SDBF)

子域名枚举工具通常只可以解决常见的子域名列表。这种方法可以通过使用Markov chains来扩展,这有利于发现子域名的结构(例如,有www1,www2可能存在等等)。Cynthia Wagner等人的研究论文更详细地解释了这一技术。SDBF产生的结果可以远远优于子域名的简单关键字枚举。

0x09 结论

定期检查你的网络环境有哪些子域名,可以让你的网络环境更加的安全。被遗忘的子域名可能让你的环境和公司面临各种各样的威胁,如子域接管甚至完全控制,如本博客开始时的示例所示。

下面的表显示了我们最近的一个基准(24-04-2017的数据),并包含了Swaveratic和各种工具的子域枚举结果:whitehouse.gov

comparison-4

 

*参考:sweepatic

源链接

Hacking more

...