在日常渗透测试和src漏洞挖掘当中,明确了目标范围之后,对于有用信息的搜集一般是首先要做的工作。而对于子域名的挖掘往往是相当重要的一步,因为这在相当一定程度上决定了给定的测试范围当中攻击面的大小,所以我对常见的子域名搜集工具和手段做了一个小小的总结。
目的一方面是方便自己熟悉多种子域名发掘手段的特点,在日后的渗透测试工作当中操作流程能更加流畅。另一方面是作为一个脚本小子对这些工具和平台做一个简单的整理分享工作,方便大家的同时也算是给工具做了点蛇皮贡献。
功能基本都是拿我学校的域名简单测试的,有些比较适应国情,有些在特定网络状态下(qiang wai)才能发挥最佳的状态,故最终结果仅供参考,排名无意分高低。
菜鸡认知毕竟有限,大师傅们有更好的思路或者发现我遗漏的点欢迎补充指正。
根据依赖的技术和手法,文章大体是依据以下逻辑来写的:
1、单纯依赖于字典的暴力枚举碰撞工具
2、多接口综合配合暴力枚举工具
3、证书反向枚举
4、安全行业大数据平台
5、搜索引擎
6、专业安全服务商互联网扫描项目共享的数据
7、第三方安全服务商相关的数据
8、根据主域名爬行
9、根据已有数据重组拼接碰撞工具
10、其他文章中发现的不太常见的方式
11、其他比较好用的方式
12、额外的一些骚tips
0x01 单纯的字典爆破型工具
最常见的属于单纯的字典爆破型工具,在高质量字典的引导下这往往是最直接干脆的手段。
1. subDomainsBrute
使用全部字典尝试获取baidu.com的子域名并导出到1.txt:subDomainsBrute.py baidu.com —full -o 1.txt
在正常的网络环境下测试最终得到112个结果。
https://github.com/lijiejie/subDomainsBrute
2. Subdomain3
使用高线程设置获得baidu.com的子域名:brutedns.py -d baidu.com -s high
支持CDN识别,支持多级域名,正常网络环境下可以得到55个结果。
https://github.com/yanxiu0614/subdomain3
3. Fierce
使用多线程枚举测试域名的子域名:Fierce -dns test.com -threads
渗透测试系统例如Kali、parrot是集成了这款工具的。
除了字典爆破以外,程序一开始会测试是否存在域传送漏洞吗,最终一共得到43个结果。如果后面不加 -threads参数,会慢很多。
https://github.com/davidpepper/fierce-domain-scanner
4. Subbrute
使用方法很简单,直接在脚本后面加域名名称。
但是有个很有意思的问题,可能是因为我学校庙比较小,换了多个系统测试都卡住不给跑。
不过爆破百度可以,拿来对大厂测试可能会比较有效。
https://github.com/TheRook/subbrute/
5. Dnsbrute
使用方法:程序后面 “-domain”参数跟测试域名。通过“-rate”参数控制速度。
Go程序,简单的枚举功能,自动把结果写到程序目录下的“目标域名.csv”当中。
自带两份字典质量个人感觉不错,默认使用5W的字典爆破。不过速度有点慢,也许是我网络环境的原因,没有等它跑完。
https://github.com/Q2h1Cg/dnsbrute
6. FuzzDomain
线程大了比较容易全家断网,对字典依赖性比较大。速度太慢没等结果。
https://github.com/Chora10/FuzzDomain
0x02 多接口综合型枚举工具
而目前比较受欢迎的子域名发掘工具,包括github上面的和渗透测试系统当中集成的工具,发展和更新的大方向比较倾向于更丰富接口和更多搜索引擎的集成以及对字典的分级。因为想要得到比较理想的结果单纯的依赖字典去枚举往往需要花费大量的时间,所以对于提升工具的测试结果来说,丰富接口和字典分级提升效率的同时也提升了结果质量。所以文章对于该类工具介绍的篇幅比较大,个人感觉基本涵盖日常能见到的和用的上的。同时这类综合类工具基本都具备几个小特点,比如先检测域传送漏洞和集成virustotal等常见第三方的api都是标配。
1. Anubis
枚举的同时,整理来自各种来源的数据,包括HackerTarget,DNSDumpster,x509 certs,VirusTotal,Google,Pkey和NetCraft。
获得baidu.com的子域名:anubis -t baidu.com
获得子域名的同时并获得对应ip:anubis -t baidu.com -ip
获得子域名并导出:anubis -t baidu.com -o 1.txt
详细usage见github介绍。
使用Anubis对我校域名进行检测和枚举可得到101个结果。
https://github.com/jonluca/Anubis
2. AQUATONE
将故障预置DNS服务器设置为Google的公共DNS服务器对测试域名进行枚举:
Aquatone-discover —domain baidu.com —fallback-nameservers 8.8.8.8
最终可以得到测试域名的224个结果,综合来看个人觉得该工具在子域名枚举工具当中属于比较强大的一款。
https://github.com/michenriksen/aquatone
3. Sublist3r
使用参数很简单,直接“-d test.com”即可开始子域名枚举。
同样是一款很受欢迎的工具,不使用爆破模式只加默认的”-d参数“就能得到测试域名的123个结果。
https://github.com/aboul3la/Sublist3r
4. Wydomain
使用方法直接在测试域名前加“-d”。
效果也比较不错,仅普通查询模式可以得到164个结果。
https://github.com/ring04h/wydomain
5. theHarvester
使用方法也是直接在域名后面添加“-d”参数,使用“-b all”参数的话工具会采用接口加上暴力破解DNS等所有手段。
这款工具会通过搜索引擎等搜集域名邮箱,然后对多个数据来源进行检索。美中不足的是对于最终结果的去重和分类等做的不是很到位。最终对域名邮箱搜集结果的数量大概30几个,子域名的结果应该在150上下。
https://github.com/laramies/theHarvester
6. Teemo
主流用法,直接在脚本后面加“-d”参数,单使用搜索引擎和第三方站点模块枚举子域名。启用brute模式可以添加参数“-b”。
对于搜索引擎的聚合相对其他工具来说做的可以说是比较尽善尽美,对于结果当中部分域名首字母大写去重的处理还略有瑕疵,不过240+的子域名和137个邮箱的结果已经很优秀了。个人感觉在国产的子域名枚举工具当中,算得上是很强。
如果使用者补充上一些付费或者有限制接口的信息,结果数量应该会更多。
https://github.com/bit4woo/teemo
7. knock
使用方法:脚本后面直接跟待测试的域名。
小亮点是会探测web服务环境,但是默认字典相对较少,目测对我校测试结果不会超过100个,个人认为中规中矩。
https://github.com/guelfoweb/knock
8. Dnsmaper
使用方法仍然是直接跟目标域名。
工具比较神奇,检测完域传送漏洞、枚举子域名并获得banner,最终会把服务器地址在地图上展示出来。
Emmm优点可能算是对于结果的展示效果可能会比较好一点吧,地图的展示效果git介绍页面上有,不过我个人觉得意义似乎不是很大。枚举速度也比较慢所以又没等它结束,不过看上去结果应该不会太差。
https://github.com/le4f/dnsmaper
9. SubDomainSniper
新版本包含12个API和8个搜索引擎。对我校子域名的爆破,API和搜索模式得到的结果加上使用默认字典得到的结果去重后有100左右。
0x03 证书反向枚举
互联网当中存在一个“证书透明度”项目,所有被发布的SSL证书都会被证书机构公布到日志当中,日志是公共的,每个人都可以查询各个网站的https证书信息(太深的原因我也不知道,猜想大概为了公开透明之类的吧)。既然公开可查,那么证书就可以用来反向枚举来获取目标域名的子域名,其实上面介绍的综合型工具基本也都会包含这类的接口,下面介绍常见的几种。
1. 全网443证书的集合
17年7月的数据,使用Zmap,from t00ls的小手冰凉ing师傅
https://github.com/cszuo/certbook
2. crt.sh
比较经典,对大厂比较有效
https://crt.sh/
3. Censys
4. Google的证书透明度报告项目
https://transparencyreport.google.com/https/certificates
5. GSDF
一款基于Google透明度报告中的证书透明度项目的工具,只会检索ssl证书当中的结果。
https://github.com/We5ter/GSDF
0x04 安全行业大数据平台
还有一些安全行业数据起家并发家的大数据平台们,多数需要付费的会员身份才能获得比较理想的数据,或者干脆售卖相关的数据,往往也会集成到综合性工具当中。
1. RISKIQ
首推RISKIQ,强的一批,本文ACE。
支持导出和直接copy,注册为free用户可以使用很多功能,诚意满满,我校域名测试可获得365个子域。
https://community.riskiq.com/
2. SHODAN
3. FOFA
4. Zoomeye
5. 微步在线
恕我直言我对它这373的结果的真实性抱有怀疑态度,因为可见结果当中数据质量并一般般
https://x.threatbook.cn/
6. Dnsdb
开会员才能查看大部分被隐藏的结果
测试域名总共得到130个结果
https://dnsdb.io/
售卖子域名数据库的站点
这是对于上面站点的展示站点。只展示304个结果里面的前50个。搜我校只得到1个结果,或许对于国外的站点效果会好些吧。
0x05 搜索引擎
下面是搜索引擎以及依赖搜索引擎的工具。
语法搜索,百度、bing和google、Yahoo的:site:baidu.com、site:xx.com -www -mail 等等
不过百度的百度以前记得有句不是很常见的语法,也很简单,貌似是“:v”还是怎样的,试了很久并没有试出来,实在是想不起来了。
只好推荐一款python3写的工具,根据百度爬行子域名,并且根据http响应状态码来判断是否可访问。
爬行百度可以获得96个测试域名的子域名,个人感觉针对于国内域名来说其结果还是比较有参考价值的。
Digger
https://github.com/admintony/Digger
0x06 专业安全服务商互联网扫描项目
一些大型的专业安全服务商会把互联网的扫描项目所得到的数据共享出来,比如Rapid7的Sonar项目。(还有很多有意思的项目__https://scans.io/)
经过测试,22.8GB的数据解压出来大概230G大小。在winserver上对大文本检索工具的测试在pilotedit、EmEditor和glogg身上兜兜转转,绕了一圈最后用的winhex(winhex牛批!),发现测试域名的结果只有6个。但是对于大厂商域名的测试得到的结果还是比较理想的。可见这种方法最终的结果与目标规模的差异也会有巨大的差异。
https://scans.io/study/sonar.fdns\_v2
第三方安全服务商一般是指virustotal、netcraft等一些主要研究领域为其他安全领域但是顺带可以提供子域名信息的厂商或者网站。常常作为api被引用在上面介绍的第二种工具当中。有个hacktarget的网站(https://dnsdumpster.com/)比较有意思,它会把搜索结果的dns关系以一张大导图的形式出来。
0x07 第三方安全服务商相关的数据
下面介绍一种稍稍另辟蹊径的方法,直接从主域名域名开始爬起,爬到再也找不到不同的域名为止。个人觉得好处在于某些网站(如学校)可能会有些内网的系统在外网上是无法访问或者收录不到的,可以借助这种方法来发现。
下面的工具是t00ls的BMa_china师傅写的,但是原版略有问题,在爬行“xxx.edu.cn”这种的时候会爬所有的“edu.cn”下的域名,所以稍微修改了一下下。
#!/usr/bin/python
#coding:utf-8
#author:BMa_china from t00ls
import requests
import argparse
import urlparse
import re
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def getSubDomain(url):
try:
response = requests.get(url, timeout=5,verify=False) # 作为一个递归查询
urlsplit = url.split(".")
url = url if len(urlsplit) == 2 else urlsplit[-2] + "." + urlsplit[-1]
patten = 'https?:\/\/[^"/]+?\.{url}'.format(
url=urlsplit[-3] + "." + urlsplit[-2]+ "." + urlsplit[-1]
)
# patten = 'https?:\/\/[^/]+?\.{url}'.format(
# url=urlsplit[-2] + "\." + urlsplit[-1]
# )
# print patten
m = re.findall(patten, response.content)
# print m
for url in m:
if url not in domainList:
print url
domainList.append(url)
getSubDomain(url)
except Exception,e:
# print str(e)
print "Wrong:-----" + " " + url
if __name__ == "__main__":
attentionPlz = """
请输入域名,如:http(s)://www.qq.com
"""
print attentionPlz
domainList = [] # 子域名列表
urlList = [] # 页面抓取的url列表
parse = argparse.ArgumentParser()
parse.add_argument("-u",dest="url",help="url",required=True)
args = parse.parse_args()
url = args.url
# url = "http://www.qq.com"
getSubDomain(url)
print domainList
print len(domainList)
0x09 根据已有数据重组拼接碰撞
另外还有根据已经存在的结果重组拼接来碰撞其他域名的工具。
altdns
https://github.com/infosec-au/altdns
0x10 其他文章中发现的不太常见的方式
下面是在其他文章当中发现的个人认为比较罕见的一种手法——互联网自治系统号码子域名枚举。
模仿文章当中的步骤发现对于文中描述的获得域名asn的操作并没有成功复现,因为站点并没有获得到我校站点的ip信息。
但是可以得到百度的asn信息,可见该方法用于大厂商的域名检测可能是有一定效果的。
使用该方法技术的一款维护时间长达6年的工具
该工具会通过检查DNSKEY记录并检查区域是否配置为NSEC或NSEC3。
dnsrecon
https://github.com/darkoperator/dnsrecon
0x11 其他比较好用的方式
然后再介绍几种我觉得_比较好用_但是不好分类的子域名发掘方式。
1. 云悉
自动获得title,支持导出。
http://www.yunsee.cn
2. 站长帮手
测试域名可以得到140个结果
http://i.links.cn/subdomain/
3. 备案号
对大厂商比较好用
http://www.beianbeian.com/search-1/%E4%BA%ACICP%E8%AF%81030173%E5%8F%B7
4. crossdomain.xml文件
利用crossdomain.xml的跨域策略设置特性
比如:
https://www.baidu.com/crossdomain.xml
5. 域传送漏洞
wooyun上出过好几个案例,李姐姐文章也介绍的很详细,不再赘述。效果虽好,不过可遇不可求。
0x14 额外的一些骚tips
最后是一些个人觉得比较骚的tips和几个额外的点,大多数来源于t00ls论坛帖子下面的讨论区。
分析已经得到域名的ip特征,根据C段寻找
Src漏洞挖掘当中关注厂商新产品,有时活动着急上线有趁虚而入之机
从APP下手,数据和流量包层面下手,进而C段探索
对ios系统的app来说,appstore最下面都有一行 “开发人员开发的其他app”
domain_hunter-Burp插件形式的子域名搜集工具。
https://github.com/bit4woo/domain\_hunter
DNSdigger-用来寻找DNS服务器
http://www.dnsdigger.com
DiscoverSubdomain
在git上搜索的过程中还发现了一款“要你命三千”(这里无任何贬义),作者把18款扫描器绑在一块了。偶尔会出现报错等小瑕疵,因为这工具有点慢,墙内网络环境对测试域名能得到100左右的结果(难道不应该得到暴多的么)。
https://github.com/coco413/DiscoverSubdomain
正常来说大多数的网络环境跑这些工具都没啥问题,但是有一点,寒假在家测试时发现如果使用中国某动宽带默认的网络环境,可能是因为DNS的问题,如果域名不存在它会自动的跳到一个自家的导航域名。这就导致结果的极大的不准确和全家断网这种情况的多发,可以说是很坑了。
本来只是想单纯的写个工具分享帖,重度拖延症战线拉的太长,文章有点四不像了,只希望能帮到需要的人。
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。
参考链接:
参考最多的一篇文章:https://blog.appsecco.com/a-penetration-testers-guide-to-sub-domain-enumeration-7d842d5570f6
该文章当中所提到点列的清单:https://gist.github.com/yamakira/2a36d3ae077558ac446e4a89143c69ab
Freebuf对该文章的译文:http://www.freebuf.com/articles/web/154809.html
嘶吼-通过对子域名的高效搜集与筛选日Yahoo:https://mp.weixin.qq.com/s?__biz=MzI0MDY1MDU4MQ==&mid=2247485237&idx=4&sn=d1a689cc7e221375b29de4e98ac6a37b
美丽联合src-子域名枚举技术攻与防: https://mp.weixin.qq.com/s?__biz=MzIzOTQ5NjUzOQ==&mid=2247484019&idx=1&sn=02d131ddfe55154b08cb2128ba830962
分享一下自己找子域名的思路:https://www.t00ls.net/viewthread.php?tid=44070
子域名收集方法讨论:https://www.t00ls.net/viewthread.php?tid=34403
通过主域名逐步抓取子域名:https://www.t00ls.net/viewthread.php?tid=39448
撸了全网的443证书:https://www.t00ls.net/viewthread.php?tid=41361
李劼杰-DNS域传送漏洞(一):http://www.lijiejie.com/dns-zone-transfer-1/
李劼杰-DNS域传送漏洞(二):http://www.lijiejie.com/dns-zone-transfer-2/
freebuf文章:http://www.freebuf.com/articles/web/117006.html
Bugcrowd LevelUp 2017虚拟会议讲座上“Esoteric sub-domain枚举技术”中的所有材料。其中所使用到的技术上面基本都已经出现过了,所以没有再进行尝试。https://github.com/appsecco/bugcrowd-levelup-subdomain-enumeration
封面图片来自:https://domain.me