子域名收集是渗透测试中,前期信息收集必不可少的一个阶段。域名是一个站点的入口,如果一个站点难以渗透,可以尝试从它的子域名或者同一台服务器上的另外一个站点作为突破口,从而进行较为隐秘的渗透测试。
最原始的子域名查询,就是在 Web 页面中输入域名,检测相关网页是否存在。后来衍射了各种各样的方法,进行子域名的查询。也有诸多工具,可以进行子域名的暴力破解,爆破的原理其实是通过枚举的方式来实现的(爆破域名顾名思义就是枚举的意思)枚举域名的A记录。本文先介绍子域名查询的几种典型方法,再给出几个典型工具,每个工具各有特色,差距不大,选择容易上手的即可。
0x10 子域名收集方法
0x11 查询 DNS 解析记录
如 MX CNAME 记录,使用 nslookup 命令就可以查询这些信息。查询DNS记录的方法,通过域名的NS服务器可以用"ls http://domain.com"的方式查询所有域名相关记录,但是可惜,现在的DNS服务器大都禁用了这个功能以提高安全性。
0x12 爬虫提取子域名
这类工具有很多,例如 burpsuite、appscan、awvs 都有爬虫的功能
0x13 搜索引擎
搜索引擎提供了一些高级搜索指令,site 就可以查询相关的域名,其实搜索引起收录的网页也是通过爬虫来爬取的。
0x14 站点配置文件
crossdomain.xml,跨域策略配置文件
robots.txt,反爬虫配置文件,Robots 协议用来告知搜索引擎哪些页面能被抓取,哪些页面不能被抓取
0x20 常用工具
爆破的原理其实是通过枚举的方式来实现的(爆破域名顾名思义就是枚举的意思)枚举域名的A记录。例如,如果要爆破 test.com 的子域名
- 首先的访问一个随机并不存在的域 abc.test.com
- 取得A记录后保存
- 开始枚举a-z0-9,比如1.test.com、 2.test.com 、3.test.com之类的。
- 接下来的步骤就分为两种方式了。
第一种:直接获取1.test.com 2.test.com 3.test.com的A记录,有 A 记录则表示存在也是可行的,但是如果遇到泛解析则该方法失效。
第二种,在泛解析的下也可以使用,把这些枚举的域名 A 记录与之前abc.test.com的A记录做对比,不同的则是存在A记录的域名,也就是在用的域名。
0x21 subDomainsBrute
项目地址:https://github.com/lijiejie/subDomainsBrute
依赖
pip2 install dnspython gevent
用法
Usage: subDomainsBrute.py [options] target.com
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-f FILE File contains new line delimited subs, default is
subnames.txt.
--full Full scan, NAMES FILE subnames_full.txt will be used
to brute
-i, --ignore-intranet
Ignore domains pointed to private IPs
-t THREADS, --threads=THREADS
Num of scan threads, 200 by default
-p PROCESS, --process=PROCESS
Num of scan Process, 6 by default
-o OUTPUT, --output=OUTPUT
Output file name. default is {target}.txt
举例(该工具只支持 python2)
0x22 subdomain3
项目地址:https://github.com/yanxiu0614/subdomain3
- 更快:三种速度模式. 用户也可以修改配置文件(/lib/config.py) 来获得更高的速度
- CDN识别支持:可以判定域名是否使用了CDN,同时新增在某些情况下自动识别是否使用CDN,而不只依赖给定的列表;
- 标准C段支持:可以对未使用CDN的域名IP进行分类.
- 多级域名支持:可以发现多级域名,无限制.
- 大字典支持:可以支持百万级字典
- 更少的资源占用:1个CPU/1GB内存/1Mbps带宽 即可获得很高速度
- 更智能:自动发现最快的DNS服务器,并使用其进行爆破;优化泛解析策略,对抗dns污染;支持从其他渠道导入子域名,同时会将部分字段导入字典二次爆破,从而更准确。
部分参数说明
-h, –help show this help message and exit
-s , –speed 三种速度模式,low,medium和high,默认是medium。
-d , –domain 要爆破的域名例如:test.com
-l , –level 爆破的域名级数,如test.test.com是1,test.test.test.com是二级
安装
git clone https://github.com/yanxiu0614/subdomain3.git
pip install -r requirement.txt
python2/3 brutedns.py -d tagetdomain -s high -l 5
0x23 OneForAll
项目地址:https://github.com/shmilylty/OneForAll
- 收集能力强大,详细模块请阅读收集模块说明。
-
利用证书透明度收集子域(目前有6个模块:
censys_api
,certspotter
,crtsh
,entrust
,google
,spyse_api
) -
常规检查收集子域(目前有4个模块:域传送漏洞利用
axfr
,检查跨域策略文件cdx
,检查HTTPS证书cert
,检查内容安全策略csp
,检查robots文件robots
,检查sitemap文件sitemap
,后续会添加检查NSEC记录,NSEC3记录等模块) -
利用网上爬虫档案收集子域(目前有2个模块:
archivecrawl
,commoncrawl
,此模块还在调试,该模块还有待添加和完善) -
利用DNS数据集收集子域(目前有23个模块:
binaryedge_api
,bufferover
,cebaidu
,chinaz
,chinaz_api
,circl_api
,dnsdb_api
,dnsdumpster
,hackertarget
,ip138
,ipv4info_api
,netcraft
,passivedns_api
,ptrarchive
,qianxun
,rapiddns
,riddler
,robtex
,securitytrails_api
,sitedossier
,threatcrowd
,wzpc
,ximcx
) -
利用DNS查询收集子域(目前有5个模块:通过枚举常见的SRV记录并做查询来收集子域
srv
,以及通过查询域名的DNS记录中的MX,NS,SOA,TXT记录来收集子域) -
利用威胁情报平台数据收集子域(目前有6个模块:
alienvault
,riskiq_api
,threatbook_api
,threatminer
,virustotal
,virustotal_api
该模块还有待添加和完善) -
利用搜索引擎发现子域(目前有18个模块:
ask
,baidu
,bing
,bing_api
,duckduckgo
,exalead
,fofa_api
,gitee
,github
,github_api
,google
,google_api
,shodan_api
,so
,sogou
,yahoo
,yandex
,zoomeye_api
),在搜索模块中除特殊搜索引擎,通用的搜索引擎都支持自动排除搜索,全量搜索,递归搜索。
-
- 支持子域爆破,该模块有常规的字典爆破,也有自定义的fuzz模式,支持批量爆破和递归爆破,自动判断泛解析并处理。
- 支持子域验证,默认开启子域验证,自动解析子域DNS,自动请求子域获取title和banner,并综合判断子域存活情况。
- 支持子域接管,默认开启子域接管风险检查,支持子域自动接管(目前只有Github,有待完善),支持批量检查。
- 处理功能强大,发现的子域结果支持自动去除,自动DNS解析,HTTP请求探测,自动筛选出有效子域,拓展子域的Banner信息,最终支持的导出格式有
rst
,csv
,tsv
,json
,yaml
,html
,xls
,xlsx
,dbf
,latex
,ods
。 - 速度极快,收集模块使用多线程调用,爆破模块使用massdns,默认配置下速度最少能达到10000pps,子域验证中DNS解析和HTTP请求使用异步多协程,多线程检查子域接管风险。
- 体验良好,日志和终端输出全使用中文,各模块都有进度条,异步保存各模块结果。
安装
git clone https://github.com/shmilylty/OneForAll.git cd OneForAll/ python -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/ pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ cd oneforall/ python oneforall.py --help
示例
0x24 子域名挖掘机
Windows 环境下很好用的一款子域名挖掘工具,提供可视化界面,容易上手。但是 bug 很多,且容易崩溃
0x25 在线扫描平台
在线平台一部分是穷举,此类跟本地的工具效果是一样的;另外一类是搜索引擎,通过 Alexa 和 Google 搜索,简单快捷,缺点是可能会缺少某些浏览量较低的域名,不是特别全面。在线平台特别多,在此举几个例子
暴力破解
http://z.zcjun.com/
https://phpinfo.me/domain/
http://tools.bugscaner.com/subdomain/搜索引擎收录
http://alexa.chinaz.com