0x00 前言
在实际渗透过程中,子域名枚举在信息收集阶段是一个不可缺少的过程,通过枚举可以显示出目标组织的域/子域来帮助我们提高渗透成功的机会。子域名枚举可以帮助我们找到可能因为维护或者其他原因而被遗忘的WEB应用程序。
0x01 子域枚举的类型
分为两种枚举类型
-
被动子域名枚举
在被动子域名枚举中,我们在不直接连接到组织管理的基础结构的情况下手机信息,在此过程中,我们从第三方进行手机信息,例如,从VirusTotal、DNSDumster、证书等收集信息,这种探测过程的好处就是不会触发目标任何标志警报。
被动子域名枚举的技术:
- 证书透明度
- ASN发现
- 使用搜索引擎
- 使用DNS(Gistub、VirusTotal等)
- 使用公共数据集
- 使用Cloudflare
- Subject Alternate Name (SAN)
-
主动子域名枚举
在主动子域名枚举中,我们通过直接探测组织管理的基础结构来收集信息。在此过程中,目标可以进行检测,这种探测可能会引起警报和或标志。
主动子域名枚举的技术:
- 暴力枚举
- 字典枚举
- DNS记录
- Http头
- DNS缓存
0x02 详细讲解
1.证书透明度
证书透明性是证书颁发机构(CA)的开源框架,他们在此框架下将证书记录到域名所有者。通过这种方式,任何人都可以看到哪个CA为哪个域颁发了证书。它类似于所有证书、证书颁发机构和域的清单。
通过证书透明度,我们可以查看库存中已颁发证书的所有条目,包括了域名、子域名和电子邮件,我们可以通过使用CT(证书透明度)日志来被动地收集有关目标基础设施的基本信息
列举几个CT日志搜索引擎:
- https://crt.sh
- https://censys.io
- https://developers.facebook.com/tools/ct/
- https://transparencyreport.google.com/https/certificates
- https://sslmate.com/certspotter/
PS:有的域/子域名称可能不存在,在这期间可能无法解析域/子域。证书透明度日志被追加,无法从CT日志中删除这些域。
2.通过搜索引擎
常用的语法是site:
例子: 网址:baidu.com
- Google(https://www.google.com/)
- Bing(https://www.baidu.com/)
- Baidu(https://www.bing.com/)
- Yahoo(https://in.search.yahoo.com/)
- Yande(https://yandex.ru/)
- Duckduckgo(https://duckduckgo.com/)
- Aol(https://search.aol.com/)
3.通过使用在线DNS工具:
- https://decoder.link/
- https://searchdns.netcraft.com/
- https://dnsdumpster.com/
- https://www.virustotal.com/gui/home/search
- https://pentest-tools.com/information-gathering/find-subdomains-of-domain
- https://www.pkey.in/tools-i/search-subdomains
- https://hackertarget.com/find-dns-host-records/
- https://findsubdomains.com/
- https://spyse.com/
4.使用ASN(自治系统号)
自治系统号是给自治系统的唯一号码,它是由因特网分配号码机构(IANA)分配的。自治系统号可以是公共的,也可以是私有的。
- 通过ip地址或者域名查找ASN编号,ASN号码将帮助我们获得ip地址池
- 使用DIG、主机或者任何其他工具将IP地址解析到域。(注注意,只有在DNS配置中配置PTR记录时,域的IP地址才会解析。)
查找ASN编号的在线工具
- http://ip-api.com/json/[IP地址/域名]
- https://www.radb.net/query?
- https://bgp.he.net/
- https://mxtoolbox.com/asn.aspx
- https://hackertarget.com/as-ip-lookup/
- https://whois.domaintools.com/
- https://who.is/
- https://asn.cymru.com/cgi-bin/whois.cgi
从ASN编号中查找ip池的在线工具
- https://bgp.he.net/
- https://mxtoolbox.com/asn.aspx
- https://hackertarget.com/as-ip-lookup/
- https://dnschecker.org/asn-whois-lookup.php
例子
whois -h whois.radb.net -- '-i origin AS36466' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq
当然Namp里面也有脚本 asn-script-args 目标asn.asn=36466
5.通过Subject Alternative Name(SAN)
SAN是X.509规范的扩展,他允许我们通过单个SSL证书保护其他域或者子域,也被称为"多域SSL证书"
通配符证书:
通配符证书只保护主域下的多个子域
多域SSL证书:
多域SSL证书保护多达250个唯一域名或者子域,以及证书中的Subject Alternative Names(SAN)字段中提到的域/子域名称。
例子:如果在 "test.com" 上颁布了多域SSL证书,那么我们可以在SAN中添加多个其他域和子域
test.com
Test.com
Ftp.test.com
从SAN提取域名的工具
通过OpenSSL提取
true | openssl s_client -connect example.org:443 2>/dev/null \
| openssl x509 -noout -text \
| perl -l -0777 -ne ‘@names=/\bDNS:([^\s,]+)/g; print join(“\n”, sort @names);’
通过Python脚本(项目中的脚本都很实用)
PS:https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/san_subdomain_enum.py
6.使用公共数据集(Rapid 7)
Rapid 7数据集链接:https://opendata.rapid7.com/
数据集涵盖了以下信息:
- 正向DNS
- 反向DNS
- HTTP响应
- SSL证书
- 端口扫描
6.使用CLoudFlare
CloudFlare用于创建CDN,这个网络充当一个反向代理服务器在用户和网站服务器之间。**
反向代理和正向代理的区别
反向代理
- 反向代理是位于Web服务器/服务前面的服务器,当用户请求网站服务时,请求被传递给反向代理,然后反向代理代表服务器与WEB服务器通信
- 为了提高性能和安全性,使用反向代理
- 反向代理用于负载均衡,SSL复用、缓存、应用程序防火墙、身份验证等。
正向代理
- 正向代理是位于客户端前面的服务器,当用户请求网站服务时,首先将请求传递给正向代理,然后正向代理代表客户端与web服务器通信
- 正向代理用于内容过滤、电子邮件安全、NATING等。
CDN:
它是一个带有Web应用防火墙的分布式缓存服务器网络,用来以最优的方式传递内容,提高最终用户的性能,最大的好处是可以隐藏真实ip。
CloudFlare子域枚举步骤:
- 登陆CloudFlare https://www.cloudflare.com/login
- 点击 "添加站点" 到你的账户 https://www.cloudflare.com/a/add-site
- 将目标作为要添加的站点
- 等待Cloudflare挖掘DNS数据并显示出结果
0x03 小结:
由于在渗透测试中,子域名枚举是信息收集是不可缺少的一部分,特别是APT攻击中,攻击者更会去注意被动子域枚举,再不触发目标报警的情况下,尽可能的最大化的收集信息。主动域名枚举会引起目标的报警,但是使用被动域名枚举就不会发生这种情况,被动枚举可以帮助在不直接与目标接触的情况下收集信息。当然如果感觉打开页面去收集比较麻烦的话,可以使用python编写脚本去自动化完成,相关代码 github上已经比较成熟,大家自行下载。