作为渗透测试人员或漏洞挖掘者,很多时候,当开始一个安全评估项目时,提供给我们的总是一个或一组域名。这样一来,我们就得开展大量前期侦查手段,去发现一些有用的资产信息,如服务器、Web应用、目标组织使用的其它域名等,以提高漏洞发现机率。子域名是前期侦查和信息收集的重要手段,本文会以简单易懂的方式介绍多种子域名枚举技术。
子域名枚举是为一个或多个域名查找子域名的过程,它是安全评估和渗透测试前期侦查和信息收集的重要手段。
子域名枚举可以发现更多评估范围相关的域名/子域名,以增加漏洞发现机率;
探测到更多隐藏或遗忘的应用服务,这些应用往往可导致一些严重漏洞;
同一组织机构的不同域名和应用服务中,往往都会存在相同漏洞。
著名的Yahoo ! Voices黑客事件,正是由于雅虎网站子域名网站部署了一个存在漏洞的应用:
一些像Google Bing这样的搜索引擎都支持高级搜索操作符以优化一些搜索请求,如这种搜索操作符通常被称为“Google dorks”。
我们可以在Google搜索中使用“site”:操作符来查找某个域名的所有子域名,另外,Google还支持其它减号操作符来排除一些我们不关心的子域名,如site:*.wikimedia.org -www -store -jobs -uk”。
Bing同样支持一些高级搜索操作符。和Google一样,Bing也支持“site:”操作符,你可以用它来查找一些Google搜索之外的其它不同结果。
还有很多第三方服务汇聚了大量DNS数据集,可通过它们来检索某个给定域名的子域名。如VirusTotal就通过用户提交的访问URLs链接来运行有自己的被动DNS复制服务,你只需在其搜索栏中输入域名,就可检索到相关域名信息。
dnsdumpster.com是另外一个有趣的工具,它可以查找出给定域名的大量子域名。以下为其子域名枚举示例:
Sublist3r也是一个比较常用的工具,它会列举出多种资源如Google、Yahoo、Bing、Baidu和Ask等搜索引擎中可查找到的子域名,它还会列举出Netcraft、Virustotal、ThreatCrowd、DNSdumpster和ReverseDNS中等聚合服务中可查找到的子域名信息。
证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机构CA会将他们发布的每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,它们也经常成为攻击者非常希望获得的有用信息。我曾写过一系列关于证书透明度的深度技术分析文章,你可点此查看。
查找某个域名所属证书的最简单方法就是使用搜索引擎来搜索一些公开CT日志,下面是常用的几种查找方法:
1. https://crt.sh/
2. https://censys.io/
3. https://developers.facebook.com/tools/ct/
4. https://google.com/transparencyreport/https/ct/
以下是使用crt.sh进行子域名枚举的示例:
我们编写了几个利用搜索引擎查找公开CT日志以探测子域名的简单脚本:GitHub ,以下是使用CT日志对uber.com进行子域名枚举的示例:
使用公开CT日志进行子域名枚举的的缺点是,在CT日志中找到的域名可能不存在,也无法解析为IP地址。你可使用massdns这样的工具与公开CT日志结合来快速识别可解析的域名。如:
./ct.py icann.org | ./bin/massdns -r resolvers.txt -t A -q -a -o -w icann_resolvable_domains.txt -
字典枚举法是另一种利用通用名称查找子域名的技术,这类工具如DNSRecon就是一个功能强大的DNS枚举工具,它的功能之一就是使用预定义的列表进行字典式的子域名枚举,它的枚举示例如下:
$ python dnsrecon.py -n ns1.insecuredns.com -d insecuredns.com -D subdomains-top1mil-5000.txt -t brt
置换扫描也是另一种发现子域名的有趣技术,这种技术使用已知域名或子域名的排列、变形、组合形式来识别新的子域名。Altdns就是这样一种通过模式变换来发掘子域名的工具:
$ python altdns.py -i icann.domains -o data_output -w icann.words -r -s results_output.txt
找到互联网自治系统号码(ASN)也可帮助我们发现属于某个组织机构的网段,这些网段信息中可能包含该组织机构的有效域名信息。
使用dig或host命令解析给定域名的IP地址。
这有一个提供IP就可找到ASN的工具——https://asn.cymru.com/cgi-bin/whois.cgi
也有提供域名就可以找到ASN的工具——http://bgp.he.net/
查找到的ASN号码可以用来查找域名对应的互联网网段,用Nmap脚本就可完美实现:
$ nmap –script targets-asn –script-args targets-asn.asn=17012 > netblocks.txt
DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主域名服务器因意外故障不可用时影响到整个域名的解析。一些DNS服务器如果被错误配置成允许用户执行DNS区域传送后,只要有client端发出请求,就会向对方提供一个zone数据库副本,其中就包含了很多域名解析的详细信息,这是DNS服务器的严重错误配置行为。以下为使用dig工具成功对一个服务器进行了区域传递攻击。如配合dig工具的枚举:
$ dig +multi AXFR @ns1.insecuredns.com insecuredns.com
由于DNSSEC中会处理一些不存在的域名,因此可以遍历DNSSEC区域并枚举其中的所有域名(点此查看相关文章)。对于DNSSEC区域中的NSEC记录,可使用ldns-walk工具来执行遍历。
$ ldns-walk @ns1.insecuredns.com insecuredns.com
一些DNSSEC区域使用NSEC3记录来对域名进行哈希加密,以防止攻击者的恶意域名收集行为,但攻击者可以收集其中的所有子域名哈希,然后离线解密即可。
工具Nsec3walker和Nsec3map可帮助我们自动收集并破解NSEC3记录中的加密哈希,安装Nsec3walker后,可使用以下命令枚举NSEC3记录中受保护区域内的子域名:
# Collect NSEC3 hashes of a domain
$ ./collect icann.org > icann.org.collect
# Undo the hashing, expose the sub-domain information.
$ ./unhash < icann.org.collect > icann.org.unhash
# Listing only the sub-domain part from the unhashed data
$ cat icann.org.unhash | grep “icann” | awk ‘{print $2;}’
del.icann.org.
access.icann.org.
charts.icann.org.
communications.icann.org.
fellowship.icann.org.
files.icann.org.
forms.icann.org.
mail.icann.org.
maintenance.icann.org.
new.icann.org.
public.icann.org.
research.icann.org.
有一些互联网项目以收集一些扫描数据为目的,然后可供安全社区和研究人员下载使用,这些项目中公布的数据集也会包含一些有用的子域名信息,这有点像海底捞针,但也值得。
Rapid7下Sonar项目发布的Forward DNS数据集,就是从多个数据源中提取域名,并向每个域名发送一个ANY查询来创建的DNS数据,它是一个压缩的JSON文件,我们可以对其进行解析,然后找到一些给定域名的子域名。该数据集体积压缩前大概有20GB,解压后有300GB大小。
Command to parse & extract sub-domains for a given domain
$ curl -silent https://scans.io/data/rapid7/sonar.fdns_v2/20170417-fdns.json.gz | pigz -dc | grep “.icann.org” | jq
我们用上述提及的几种技术对域名icann.org进行子域名枚举,并对各种技术收集到的域名结果进行比较,下图显示了各种技术发现的icann.org相关的独特且可解析的子域名数量,从中可看出Forward DNS数据集子域名枚举技术相对效果较好。
我们对子域枚举技术、工具和数据集创建了一个参考项目,更多详情和工具请点此查看。当然,最后,小编还是要推荐一个比较好用的工具,那就是国内安全研究人员李劼杰的一个早期子域名枚举工具subDomainsBrute,该工具也具有良好的子域名枚举效率,值得推荐使用。
*参考来源:appsecco,freebuf小编clouds编译,转载请注明来自FreeBuf.COM
这些评论亮了
https://blog.appsecco.com/a-penetration-testers-guide-to-sub-domain-enumeration-7d842d5570f6