导语:作为渗透测试工程师或者漏洞赏金猎人,当开始一项安全评估的时候,大多数被提供的都是一个简单的域名或者是一组域名。因此,我们不得不进行大量的侦查,以发现一些有用的资源,比如服务器、Web应用程序、目标组织的域名,这样就可以增加
作为渗透测试工程师或者漏洞赏金猎人,当开始一项安全评估的时候,大多数被提供的都是一个简单的域名或者是一组域名。因此,我们不得不进行大量的侦查,以发现一些有用的资源,比如服务器、Web应用程序、目标组织的域名,这样就可以增加找到漏洞的机会。
子域名枚举是侦察阶段的一个重要部分。本文以一种简明扼要的方式介绍了多种子域名枚举技术。
子域名枚举是什么?
子域名枚举是为一个或多个域查找子域的过程。它是侦察阶段的重要组成部分。
为什么要进行子域名枚举?
· 子域名枚举可以显示很多域名或者子域名,它们在安全评估的范围内,从而增加了发现漏洞的机会。
· 发现运行在隐藏的、被遗忘的子域名上的应用程序可以使我们发现关键的漏洞。
· 通常情况下,同一组织的不同域名或应用程序会出现相同的漏洞。
著名的Yahoo ! Voices黑客事件,正是由于雅虎网站子域名上安装了一个易受攻击的应用程序
子域名枚举技术
1.像Google和Bing这样的搜索引擎支持各种高级搜索引擎优化搜索查询。这些运营商通常被称为“Google dorks”。
· 我们可以在Google搜索中使用“site:”操作符来查找Google查找到的一个域名的所有子域名。Google还支持额外的减号运算符,以排除我们对“网站:wikimedia.org-www-store-jobs-uk”不感兴趣的子域名。
在Google搜索中使用“site:”操作符查找子域名
· Bing搜索引擎也支持一些高级搜索操作。和Google一样,Bing也支持“site:”操作符,以便于你可能想要查找除Google搜索之外的其他结果。
在Bing搜索中使用“site:”操作符查找子域名
2.有许多第三方服务聚合了大量的DNS数据集,并通过它们来检索给定域名的子域名。
· VirusTotal运行自己的被动DNS复制服务,它是通过存储用户在访问urls时提交的DNS决议执行构建的。如果检索域名的信息,你只需要在搜索栏中输入域名。
使用VirusTotal查找子域名
用VirusTotal找到的子域名
l DNSdumpster是另一个有趣的工具,它可以为给定的域名找到大量的子域名。
使用DNSdumpster查找子域名
Sublist3r是目前比较热门的工具,它使用各种资源枚举子域名。Sublist3r会列举出使用Google、Yahoo、Bing、Baidu和Ask等搜索引擎查找到的子域名。Sublist3r还会列举使用Netcraft、Virustotal、ThreatCrowd、DNSdumpster和ReverseDNS查找到的子域名。
使用Sublist3r进行子域名枚举
3. Certificate Transparency(CT)是一个项目,在这个项目中,证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中。SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此SSL/TLS证书成为了攻击者的切入点。
查找一个域名证书的最简单方法是使用搜索引擎来收集计算机的CT日志,并让任何搜索引擎搜索它们。下面仅列出了比较常用的几种:
3. https://developers.facebook.com/tools/ct/
4. https://google.com/transparencyreport/https/ct/
使用crt.sh查找一个组织主域名的子域名
我们编写了几个脚本,以简化使用CT日志搜索引擎查找子域名的过程。脚本可在我们的github知识库中找到——https://github.com/appsecco/bugcrowd-levelup-subdomain-enumeration
从uber.com 的CT日志中获得的有趣子域名
在子域名枚举中使用CT的缺点是,在CT日志中找到的域名可能不再存在,因此它们不能被解析为IP地址。可以使用诸如massdns这样与CT日志结合的工具来快速识别可解析的域名。
# ct.py - extracts domain names from CT Logs(shipped with massdns)# massdns - will find resolvable domains & adds them to a file ./ct.py icann.org | ./bin/massdns -r resolvers.txt -t A -q -a -o -w icann_resolvable_domains.txt -
使用massdns查找可解析域名
4.基于字典的枚举是另一种查找带有通用名称的子域名的技术。DNSRecon是一个功能强大的DNS枚举工具,它的功能之一是使用预定义的词表进行基于词典的子域名枚举。
$ python dnsrecon.py -n ns1.insecuredns.com –d insecuredns.com -D subdomains-top1mil-5000.txt -t brt
基于字典的DNSRecon枚举工具
5.置换扫描是另一种识别子域名的有趣技术。在这种技术中,我们使用已经已知的域名或子域名的排列、变更和突变来识别新的子域名。
l Altdns以一定的模式发现子域名 $ python altdns.py -i icann.domains -o data_output -w icann.words -r -s results_output.txt
使用AltDNS查找到与特定置换或修改匹配的子域名
6. 找到自治系统号将帮助我们识别属于一个组织的网段,这个组织中可能有有效的域名。
· 使用dig或host解析给定域名的IP地址。
· 提供IP地址就可以找到ASN的工具——https://asn.cymru.com/cgi-bin/whois.cgi
· 提供域名就可以找到ASN的工具——http://bgp.he.net/
使用IP地址查找ASN
· 发现的ASN编号可以用来查找域名的网段。有Nmap脚本可以实现——
https://nmap.org/nsedoc/scripts/targets-asn.html $ nmap --script targets-asn --script-args targets-asn.asn=17012 > netblocks.txt
NSE脚本使用自治系统号查找网段
7. 区域传送是DNS事务的一种类型,DNS服务器将一个完整或部分的区域文件副本传递给另一个DNS服务器。如果区域传送没有被安全地配置,任何人都可以在服务器上启动区域传送,并获得该区域文件的副本。而区域文件包含了许多关于该区域和驻留在该区域的主机的信息。
$ dig +multi AXFR @ns1 .insecuredns.com insecuredns.com
使用DIG工具对一个服务器进行了成功的区域传送
8. 由于在DNSSEC中处理不存在的域名,所以可以遍历DNSSEC区域并枚举该区域中的所有域名。
对于使用NSEC记录的DNSSEC区域,可以使用像ldns-walk这样的工具来执行区域遍历。
$ ldns-walk @ns1.insecuredns.com insecuredns.com
对带NSEC记录的DNSSEC区域进行区域遍历
· 一些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.
9.有一些项目互联网范围内扫描以收集数据,并提供给研究人员和安全社区。这些项目发布的数据集是子域名信息的宝库。尽管在这个庞大的数据集中找到子域就像海底捞针,但这是值得的。
Forward DNS数据集作为Project Sonar的一部分发布。该数据是通过从多个数据源提取域名,并为每个域发送一个ANY查询来创建的。它的格式是一个压缩的JSON文件。我们可以解析数据集找到给定域名的子域名。数据集是巨大的(20+GB压缩,300+GB未压缩)。
# 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
使用FDNS数据集枚举子域
子域名枚举技术的比较
我们用已讨论的几个技术对icann.org进行了子域名枚举,并比较了收集到的结果。下面的柱状图显示了用每种技术找到的icann.org不重复的、可解析的子域名的数量。
用每种技术找到的icann.org不重复的、可解析的子域名的数量
子域名枚举参考
我们为子域枚举技术、工具和数据集创建了一个简单的参考。这个参考是使用Github gist创建的,可以随意使用和修改
——https://gist.github.com/yamakira/2a36d3ae077558ac446e4a89143c69ab
子域名枚举的快速参考
搜索引擎:
· Google – site: operator
· Bing – site: operator
DNS 信息收集:
· ViewDNS
CT日志:
· https://developers.facebook.com/tools/ct/
· https://google.com/transparencyreport/https/ct/
工具:
· Altdns
· massdns
· enumall
· DNSRecon
· XRay
· Aquatone
数据集:
· Certificate Transparency logs
· https://github.com/appsecco/bugcrowd-levelup-subdomain-enumeration
参考
· https://blog.appsecco.com/open-source-intelligence-gathering-101-d2861d4429e3
· https://www.databreaches.net/hackers-post-450k-credentials-apparently-pilfered-from-yahoo/
· http://info.menandmice.com/blog/bid/73645/Take-your-DNSSEC-with-a-grain-of-salt
· https://www.peerlyst.com/posts/bsideslv-2017-breaking-ground-with-underflow-bsides-las-vegas