公共资源
最常见的姿势,比如site:paypal.com
已经知道www、shopping等二级域名,没必要让它们在搜索结果继续出现,可以试试inurl指令。site:paypal.com -inurl:www -inurl:shopping
通过inurl指令一直做排除,直至搜索结果里没有新的结果了。这个过程手动做很辛苦,可以找个自动化工具完成。
更多公共资源有:
-
搜索引擎。Google,Bing,雅虎,百度等
-
virustotal.com - virustotal有许多域名的子域名数数据,使用“domain:target.com”指令可以查看它知道的
-
dnsdumpster.com - 看名字就知道了,这个网站是安全公司Hacker Target的项目
-
crt.sh - SSL是一个信息金矿,使用"%target.com"有惊喜。COMODO旗下的SSL证书检索网站
-
censys.io - 有时候全网的主机和网站信息也很有用
-
searchdns.netcraft.com - 另一个数据源,来自英国老牌安全公司Netcraft
-
shodan.io - 撒旦爬了整个互联网的基础设施信息,在这可以知道许多服务器的历史信息和当前状态,包括子域名、服务器版本等。
穷举猜解
也许就有那么些子域名从来没被发现过,上述公共资源都没有收录,这时可以尝试下穷举猜解。下边是一个工具列表:
-
Subbrute - 一个DNS元信息爬虫,可以枚举DNS记录和子域
-
dnscan - 一个Python编写、基于字典的DNS子域扫描工具
-
Nmap - 你没看错,Nmap也可以扫描子域,只需要找到相应脚本
-
Recon-Ng - recon-ng框架也有个子域名扫描模块(brute_hosts)
-
DNSRecon - 一个强力DNS枚举脚本
-
Fierce - 一个轻量级的枚举扫描工具
-
Gobuster - Go编写的Alternative directory和file busting工具
-
DNSenum - Perl编写,提供递归功能
-
AltDNS - 暴力破解之外,还提供已有结果排序功能
这份名单并不完整,还有更多特色工具有待挖掘。
上述工具中,有些工具内置了字典,有些则需要专门设置。Bitquark开源了一份现成字典,为互联网上发现过的1000、10000、100000乃至1000000个常见子域名列表。Seclists项目也有一份常见子域名清单。
资源比较多,Bugcrowd技术总监Jason Haddix为此基于Recon-Ng框架专门写了一聚合脚本Enumall.sh,它支持Google&Bing&百度等搜索引擎查找、Netcraft查找以及SecLists子域名字典枚举等功能。来看看功能演示图