子域名收集是渗透测试中,前期信息收集必不可少的一个阶段。域名是一个站点的入口,如果一个站点难以渗透,可以尝试从它的子域名或者同一台服务器上的另外一个站点作为突破口,从而进行较为隐秘的渗透测试。
最原始的子域名查询,就是在 Web 页面中输入域名,检测相关网页是否存在。后来衍射了各种各样的方法,进行子域名的查询。也有诸多工具,可以进行子域名的暴力破解,爆破的原理其实是通过枚举的方式来实现的(爆破域名顾名思义就是枚举的意思)枚举域名的A记录。本文先介绍子域名查询的几种典型方法,再给出几个典型工具,每个工具各有特色,差距不大,选择容易上手的即可。
如 MX CNAME 记录,使用 nslookup 命令就可以查询这些信息。查询DNS记录的方法,通过域名的NS服务器可以用"ls http://domain.com"的方式查询所有域名相关记录,但是可惜,现在的DNS服务器大都禁用了这个功能以提高安全性。
这类工具有很多,例如 burpsuite、appscan、awvs 都有爬虫的功能
搜索引擎提供了一些高级搜索指令,site 就可以查询相关的域名,其实搜索引起收录的网页也是通过爬虫来爬取的。
robots.txt,反爬虫配置文件,Robots 协议用来告知搜索引擎哪些页面能被抓取,哪些页面不能被抓取
爆破的原理其实是通过枚举的方式来实现的(爆破域名顾名思义就是枚举的意思)枚举域名的A记录。例如,如果要爆破 test.com 的子域名
项目地址: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
项目地址:https://github.com/yanxiu0614/subdomain3
部分参数说明
-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
项目地址: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
),在搜索模块中除特殊搜索引擎,通用的搜索引擎都支持自动排除搜索,全量搜索,递归搜索。
rst
, csv
, tsv
, json
, yaml
, html
, xls
, xlsx
, dbf
, latex
, ods
。安装
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
Windows 环境下很好用的一款子域名挖掘工具,提供可视化界面,容易上手。但是 bug 很多,且容易崩溃
在线平台一部分是穷举,此类跟本地的工具效果是一样的;另外一类是搜索引擎,通过 Alexa 和 Google 搜索,简单快捷,缺点是可能会缺少某些浏览量较低的域名,不是特别全面。在线平台特别多,在此举几个例子
暴力破解
http://z.zcjun.com/
https://phpinfo.me/domain/
http://tools.bugscaner.com/subdomain/
搜索引擎收录
http://alexa.chinaz.com