子域名枚举的艺术首席安全官频道

1.png

1.png

写在前面的话

当我们在查找某个域名的有效子域名时,首席安全官频道我们通常需要使用子域名枚举这项技术。但是,除非DNS服务器暴露了完整的DNS空间(涉及到AFXR协议),否则我们真的很难拿到目标域名的子域名列表。目前主要的技术是使用一个常用域名的字典,并通过对每一个域名尝试进行解析来查找子域名。虽然这种方法在某些情况下非常有效,但是对于那些名字非常奇怪或罕见的域名来说,这种方法就没多大用了。另一种方法就是利用网络爬虫来爬取二级域名,并尝试搜索出子域名的链接地址。当然了,还有一种更加快速的方法,即直接使用搜索引擎。

子域名枚举是网络侦查阶段的一个重要组成部分,在进行攻击之前,网络攻击者需要映射出目标网络的整体结构,并尝试找出一个薄弱点来访问服务器所在的内部网络。

举例说明

在完成了子域名枚举这一过程之后,攻击者在目标DNS空间中找到了下面这个子域名:blog.example.com。攻击者在对Web应用层进行了深度分析之后发现,这个博客使用了Wordpress来作为内容管理系统。那么接下来,攻击者就可以使用wpscan来扫描Wordpress漏洞了。幸运的是,目标网络的Wordpress实例使用了一个存在漏洞的插件,而攻击者可以利用这个插件漏洞来访问目标服务器和内部网络。虽然这个例子听起来有些夸张,但这是一个出现在巴拿马文件中的真实例子。

接下来,我们会给大家介绍几款目前最流行的开源子域名枚举工具以及相关技术。

2.png

2.png

DNS域传送技术

最简单且最基础的技术就是直接向DNS服务器发送AXFR请求:

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

DNS域传送技术可以帮我们拷贝主DNS服务器和二级DNS服务器的内容。因此,我们建议各位网络管理员禁止服务器接收来自未认证DNS服务器的AXFR请求,这样就可以防止这种攻击技术了。

注:与DNS域传送技术类似的一项技术名叫NSEC攻击,而这种技术可以枚举出DNSSEC签名空间。

Google

是时候让Google登场了!没错,我们可以使用各种各样的操作符来优化我们的搜索语句。正如之前所述,我们可以使用网络爬虫来爬取目标站点的子域名,而Google和Bing这样的搜索引擎同样可以帮助我们实现这个目标。我们可以使用“site”操作符来寻找目标站点的子域名:

site:example.com

Rapid7 DNS数据集-【传送门】

Rapid7在scans.io库中对外提供了一个DNS学习数据集,这个DNS数据集旨在帮助我们查找到互联网中的所有域名,但实际上这个列表并不完整。下载完最新版本的快照之后,你可以通过“jq”命令来搜索子域名【参考资料】:

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

“jq”命令会根据正则表达式“ending with .example.com”来匹配并查找数据集中所有符合条件的子域名。值得一提的是,免费在线服务DNSDumpster同样使用了这种技术。

Censys.io – 【传送门】

Censys.io是scans.io所发布的数据子集的访问接口,它可以通过证书中的关键字来进行搜索,而这通常会帮助我们搜索出新的子域名:

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

Crt.sh  - 【传送门】

Crt.sh是COMODO提供的一个在线服务,它同样可以完成证书搜索任务。虽然它所使用的数据集与Censys不同,但两者的核心思想是一样的:即利用证书信息来查找子域名。

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

需要注意的是,也许有的查询结果为“NXDOMAIN”,而这些域名很有可能存在于目标的内部网络系统中,因为管理员有的时候会利用这些公共服务器的证书来设置内部网络服务器。

Sublist3r – 【传送门】

对于子域名枚举来说,目前最热门的开源工具当属Sublist3r了。它可以从多个源中获取查询的输出结果。例如:

-Google
-Bing
-Virustotal
-crt.sh
-...

虽然绝大多数情况下它所返回的数据都是正确的,但你有可能会遇到一些无法解析的子域名(例如响应为“NXDOMAIN”的域名)。这是因为Sublist3r会最大程度地查询可能存在的子域名,而不会去验证这些域名是否真实存在。

Sublist3r还使用了一个名叫subbrute的独立项目,而Subbrute使用了一个常用子域名字典,并通过这个字典来找出可以正常解析的子域名集合。

使用方法如下:

python sublist3r.py -d example.com

运行之后,系统将会显示出example.com的所有子域名。

theHarvester – 【传送门】

这里要介绍的另一款开源情报收集工具就是theHarvester,它可以寻找出与目标域名有关的电子邮箱地址、子域名和虚拟主机。但是与Sublist3r相比,它所能提供的子域名查询结果十分有限。

使用命令如下:

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

Smart DNS Brute-Forcer (SDBF) – 【传送门】

子域名枚举工具中通常都包含有一个需要进行尝试解析的常见子域名列表,而我们可以利用马尔可夫链的知识来扩展这种技术。例如当你查找到了www1之后,也许www2也会存在,以此类推。这篇研究论文对这项技术进行了非常详细的介绍,而SDBF的查询结果要比简单的关键字枚举技术丰富得多。

总结

下面这张图片显示的是我们使用各种工具对whitehoust.gov所进行的子域名枚举结果,数据收集与2017年4月24日。

3.png

3.png

本文所介绍的这些工具和技术不仅是攻击者需要学习的,而且网站管理员同样应该好好看一看。因为对于网站管理员来说,只有通过定期检查才能确定哪些子域名已经暴露在了攻击者的视线范围之内。换句话说,对自己的网络环境进行定期的网络侦查将会给你提供更大的安全可见度。

除此之外,那些被遗忘的子域名很可能会成为攻击者的切入点,而这些子域名也会让你的网站面临子域名接管等威胁,有时甚至还会让企业的整个网络被非法入侵。

* 参考来源:sweepatic, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

2017-05-03 10:34 阅读:80