項目介紹
項目地址:https://github.com/shmilylty/OneForAll
在滲透測試中信息收集的重要性不言而喻,子域收集是信息收集中必不可少且非常重要的一環,目前網上也開源了許多子域收集的工具,但是總是存在以下部分問題:
- 不夠強大,子域收集的接口不夠多,不能做到對批量子域自動收集,沒有自動子域解析,驗證,FUZZ以及信息拓展等功能。
- 不夠友好,固然命令行模塊比較方便,但是當可選的參數很多,要實現的操作復雜,用命令行模式就有點不夠友好,如果有交互良好,高可操作的前端那么使用體驗就會好很多。
- 缺少維護,很多工具幾年沒有更新過一次,issues和PR是啥,不存在的。
- 效率問題,沒有利用多進程,多線程以及異步協程技術,速度較慢。
為了解決以上痛點,此項目應用而生,正如其名,我希望OneForAll是一款集百家之長,功能強大的全面快速子域收集終極神器🔨。
功能特性
- 收集能力強大,詳細模塊請閱讀收集模塊說明。
- 利用證書透明度收集子域(目前有6個模塊:
censys_api
,certspotter
,crtsh
,entrust
,google
,spyse_api
) - 常規檢查收集子域(目前有4個模塊:域傳送漏洞利用
axfr
,檢查跨域策略文件cdx
,檢查HTTPS證書cert
,檢查內容安全策略csp
,檢查robots文件robots
,檢查sitemap文件sitemap
,利用NSEC記錄遍歷DNS域dnssec
,后續會添加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
),在搜索模塊中除特殊搜索引擎,通用的搜索引擎都支持自動排除搜索,全量搜索,遞歸搜索。
- 利用證書透明度收集子域(目前有6個模塊:
- 支持子域爆破,該模塊有常規的字典爆破,也有自定義的fuzz模式,支持批量爆破和遞歸爆破,自動判斷泛解析並處理。
- 支持子域驗證,默認開啟子域驗證,自動解析子域DNS,自動請求子域獲取title和banner,並綜合判斷子域存活情況。
- 支持子域接管,默認開啟子域接管風險檢查,支持子域自動接管(目前只有Github,有待完善),支持批量檢查。
- 處理功能強大,發現的子域結果支持自動去除,自動DNS解析,HTTP請求探測,自動篩選出有效子域,拓展子域的Banner信息,最終支持的導出格式有
rst
,csv
,tsv
,json
,yaml
,html
,xls
,xlsx
,dbf
,latex
,ods
。 - 速度極快,收集模塊使用多線程調用,爆破模塊使用massdns,默認配置下速度最少能達到10000pps,子域驗證中DNS解析和HTTP請求使用異步多協程,多線程檢查子域接管風險。
- 體驗良好,各模塊都有進度條,異步保存各模塊結果。
環境需求
Windows平台必須使用3.8.0以上版本
使用指南
下載
git clone https://gitee.com/shmilylty/OneForAll.git
安裝
你可以通過pip3安裝OneForAll的依賴,以下為Windows系統下使用pip3安裝依賴的示例:注意:如果你的Python3安裝在系統Program Files目錄下,如:C:\Program Files\Python38
,那么請以管理員身份運行命令提示符cmd執行以下命令!
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/ python oneforall.py --help
使用
python oneforall.py --target baidu.com run
查詢結果
baidu.com.csv是每個主域下的子域收集結果。
all_subdomain_result_1583034493.csv是每次運行OneForAll收集到子域的匯總結果,包含baidu.com.csv,方便在批量收集場景中獲取全部結果。
result.sqlite3是存放每次運行OneForAll收集到子域的SQLite3結果數據庫,其數據庫結構如下圖:
Database
其中類似baidu_com_origin_result表存放每個模塊最初子域收集結果。
其中類似baidu_com_resolve_result表存放對子域進行解析后的結果。
其中類似baidu_com_last_result表存放上一次子域收集結果(需要收集兩次以上才會生成)。
其中類似baidu_com_now_result表存放現在子域收集結果,一般情況關注這張表就可以了。
oneforall.py使用幫助
python oneforall.py --help
NAME oneforall.py - OneForAll幫助信息 SYNOPSIS oneforall.py COMMAND | --target=TARGET <flags> DESCRIPTION OneForAll是一款功能強大的子域收集工具 Example: python3 oneforall.py version python3 oneforall.py --target example.com run python3 oneforall.py --target ./domains.txt run python3 oneforall.py --target example.com --valid None run python3 oneforall.py --target example.com --brute True run python3 oneforall.py --target example.com --port small run python3 oneforall.py --target example.com --format csv run python3 oneforall.py --target example.com --dns False run python3 oneforall.py --target example.com --req False run python3 oneforall.py --target example.com --takeover False run python3 oneforall.py --target example.com --show True run Note: 參數alive可選值True,False分別表示導出存活,全部子域結果 參數port可選值有'default', 'small', 'large', 詳見config.py配置 參數format可選格式有'rst', 'csv', 'tsv', 'json', 'yaml', 'html', 'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods' 參數path默認None使用OneForAll結果目錄生成路徑 ARGUMENTS TARGET 單個域名或者每行一個域名的文件路徑(必需參數) FLAGS --brute=BRUTE 使用爆破模塊(默認False) --dns=DNS DNS解析子域(默認True) --req=REQ HTTP請求子域(默認True) --port=PORT 請求驗證子域的端口范圍(默認只探測80端口) --valid=VALID 只導出存活的子域結果(默認False) --format=FORMAT 結果保存格式(默認csv) --path=PATH 結果保存路徑(默認None) --takeover=TAKEOVER 檢查子域接管(默認False)