强大的子域搜集工具-OneForAll
项目介绍
项目地址: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)