OneForAll,是 shmilylty 在 Github 上開源的子域收集工具,目前版本為 v0.4.3。
-
收集能力強大,利用證書透明度收集子域、常規檢查收集子域、利用網上爬蟲檔案收集子域、利用DNS數據集收集子域、利用DNS查詢收集子域、利用威脅情報平台數據收集子域、利用搜索引擎發現子域,在搜索模塊中除特殊搜索引擎,通用的搜索引擎都支持自動排除搜索,全量搜索,遞歸搜索。
-
支持子域爆破,該模塊有常規的字典爆破,也有自定義的fuzz模式,支持批量爆破和遞歸爆破,自動判斷泛解析並處理。
-
支持子域驗證,默認開啟子域驗證,自動解析子域DNS,自動請求子域獲取title和banner,並綜合判斷子域存活情況。
-
支持子域爬取,根據已有的子域,請求子域響應體以及響應體里的JS,從中再次發現新的子域。
-
支持子域置換,根據已有的子域,使用子域替換技術再次發現新的子域。
-
支持子域接管,默認開啟子域接管風險檢查,支持子域自動接管(目前只有Github,有待完善),支持批量檢查。
-
處理功能強大,發現的子域結果支持自動去除,自動DNS解析,HTTP請求探測,自動篩選出有效子域,拓展子域的Banner信息,最終支持的導出格式有txt, csv, json。
-
速度極快,收集模塊使用多線程調用,爆破模塊使用massdns,DNS解析速度每秒可解析350000以上個域名,子域驗證中DNS解析和HTTP請求使用異步多協程,多線程檢查子域接管風險。
-
體驗良好,各模塊都有進度條,異步保存各模塊結果。
使用
OneForAll基於Python 3.6.0開發和測試,OneForAll需要高於Python 3.6.0的版本才能運行。安裝Python環境可以參考Python 3 安裝指南。運行以下命令檢查Python和pip3版本:
python -V
pip3 -V
如果你看到類似以下的輸出便說明Python環境沒有問題:
Python 3.6.0 pip 19.2.2 from C:\Users\shmilylty\AppData\Roaming\Python\Python36\site-packages\pip (python 3.6)
安裝步驟(git 版)
-
下載
由於該項目處於開發中,會不斷進行更新迭代,下載時請使用git clone克隆最新代碼倉庫,國內推薦使用碼雲進行克隆比較快:
git clone https://gitee.com/shmilylty/OneForAll.git
或者:
git clone https://github.com/shmilylty/OneForAll.git
-
安裝
通過pip3安裝OneForAll的依賴
cd OneForAll/
python3 -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/
python3 oneforall.py --help
-
更新
執行以下命令更新項目(可保存對/config/setting.py和/config/api.py的修改):
git stash # 暫存本地的修改
git fetch --all # 拉取項目更新
git pull # 下載覆蓋
git stash pop # 釋放本地修改
安裝步驟(docker 版)
首先下載並編輯配置文件,添加自己的api和個性化設置,並保留原始文件結構
config
├── api.py
├── log.py
└── setting.py
拉取鏡像並執行,其中~/.config替換為你自己配置文件所在文件夾的路徑
docker pull shmilylty/oneforall
docker run -it --rm -v ~/results:/OneForAll/results -v ~/.config:/OneForAll/config oneforall --target example.com run
參數直接加在指令末尾,結果會輸出在本地目錄~/results,如需保存到其他位置,可以自行修改。
使用演示
如果你是通過pip3安裝的依賴則使用以下命令運行示例:
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./example.txt run
我們以python3 oneforall.py --target example.com run命令為例,OneForAll在默認參數正常執行完畢會在results目錄生成相應結果:
oneforall
example.com.csv是每個主域下的子域收集結果。
all_subdomain_result_1583034493.csv是每次運行OneForAll收集到子域的匯總結果,包含example.com.csv,方便在批量收集場景中獲取全部結果。
result.sqlite3是存放每次運行OneForAll收集到子域的SQLite3結果數據庫,其數據庫結構如下圖:
OneForAll
其中類似example_com_origin_result表存放每個模塊最初子域收集結果。
其中類似
example_com_resolve_result表存放對子域進行解析后的結果。
其中類似example_com_last_result表存放上一次子域收集結果(需要收集兩次以上才會生成)。
其中類似example_com_now_result表存放現在子域收集結果,一般情況關注這張表就可以了。
OneForAll 作為一個命令行工具,它的所有參數如下:
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 --targets ./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 --fmt 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配置
參數fmt可選格式有 'csv','json'
參數path默認None使用OneForAll結果目錄生成路徑
ARGUMENTS
TARGET
單個域名(二選一必需參數)
TARGETS
每行一個域名的文件路徑(二選一必需參數)
FLAGS
--brute=BRUTE
s
--dns=DNS
DNS解析子域(默認True)
--req=REQ
HTTP請求子域(默認True)
--port=PORT
請求驗證子域的端口范圍(默認只探測80端口)
--valid=VALID
只導出存活的子域結果(默認False)
--fmt=FMT
結果保存格式(默認csv)
--path=PATH
結果保存路徑(默認None)
--takeover=TAKEOVER
檢查子域接管(默認False)
◆ 總結
OneForAll 收集能力強大、支持子域爆破、支持子域驗證、支持子域爬取、支持子域置換、支持子域接管、處理功能強大、速度極快、體驗良好,是一款集百家之長,功能強大的全面快速子域收集工具。