子域名收集是滲透測試中,前期信息收集必不可少的一個階段。域名是一個站點的入口,如果一個站點難以滲透,可以嘗試從它的子域名或者同一臺服務器上的另外一個站點作爲突破口,從而進行較爲隱祕的滲透測試。
最原始的子域名查詢,就是在 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
),在搜索模塊中除特殊搜索引擎,通用的搜索引擎都支持自動排除搜索,全量搜索,遞歸搜索。
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
示例
0x24 子域名挖掘機
Windows 環境下很好用的一款子域名挖掘工具,提供可視化界面,容易上手。但是 bug 很多,且容易崩潰
0x25 在線掃描平臺
在線平臺一部分是窮舉,此類跟本地的工具效果是一樣的;另外一類是搜索引擎,通過 Alexa 和 Google 搜索,簡單快捷,缺點是可能會缺少某些瀏覽量較低的域名,不是特別全面。在線平臺特別多,在此舉幾個例子
暴力破解
http://z.zcjun.com/
https://phpinfo.me/domain/
http://tools.bugscaner.com/subdomain/
搜索引擎收錄
http://alexa.chinaz.com