OneForAll:一款功能强大的子域名收集工具
- 发表于
- 安全工具
OneForAll 简介
在渗透测试中信息收集的重要性不言而喻,子域名收集是信息收集中必不可少且非常重要的一环,目前网上也开源了许多子域收集的工具,但是总是存在以下部分问题:
- 不够强大,子域收集的接口不够多,不能做到对批量子域自动收集,没有自动子域解析,验证,FUZZ以及信息拓展等功能。
- 不够友好,固然命令行模块比较方便,但是当可选的参数很多,要实现的操作复杂,用命令行模式就有点不够友好,如果有交互良好,高可操作的前端那么使用体验就会好很多。
- 缺少维护,很多工具几年没有更新过一次,issues和PR是啥,不存在的。
- 效率问题,没有利用多进程,多线程以及异步协程技术,速度较慢。
为了解决以上痛点,此项目应用而生,我希望OneForAll是一款集百家之长,功能强大的全面快速子域收集终极神器。
OneForAll 功能特性
- 收集能力强大,详细模块请阅读收集模块说明。
- 利用证书透明度收集子域(目前有6个模块:
censys_api
,certdb_api
,certspotter
,crtsh
,entrust
,google
) - 常规检查收集子域(目前有4个模块:域传送漏洞利用
axfr
,检查跨域策略文件cdx
,检查HTTPS证书cert
,检查内容安全策略csp
,后续会添加检查NSEC记录,NSEC记录等模块) - 利用网上爬虫档案收集子域(目前有2个模块:
archivecrawl
,commoncrawl
,此模块还在调试,该模块还有待添加和完善) - 利用DNS数据集收集子域(目前有16个模块:
binaryedge_api
,circl_api
,hackertarget
,riddler
,bufferover
,dnsdb
,ipv4info
,robtex
,chinaz
,dnsdb_api
,netcraft
,securitytrails_api
,chinaz_api
,dnsdumpster
,ptrarchive
,sitedossier
) - 利用DNS查询收集子域(目前有1个模块:通过枚举常见的SRV记录并做查询来收集子域
srv
,该模块还有待添加和完善) - 利用威胁情报平台数据收集子域(目前有5个模块:
riskiq_api
,threatbook_api
,threatminer
,virustotal
,virustotal_api
该模块还有待添加和完善) - 利用搜索引擎发现子域(目前有15个模块:
ask
,bing_api
,fofa_api
,shodan_api
,yahoo
,baidu
,duckduckgo
,google
,so
,yandex
,bing
,exalead
,google_api
,sogou
,zoomeye_api
),在搜索模块中除特殊搜索引擎,通用的搜索引擎都支持自动排除搜索,全量搜索,递归搜索。
- 利用证书透明度收集子域(目前有6个模块:
- 处理功能强大,发现的子域结果支持自动去除,自动DNS解析,HTTP请求探测,自动移除无效子域,拓展子域的Banner信息,最终支持的导出格式有
csv
,tsv
,json
,yaml
,html
,xls
,xlsx
,dbf
,latex
,ods
。 - 速度极速,收集模块使用多线程调用,爆破模块使用异步多进程多协程,DNS解析和HTTP请求使用异步多协程。
OneForAll 安装与使用
由于该项目处于开发中,会不断进行更新迭代,下载使用最好克隆最新项目。
安装要求:Python 3.6-3.7
安装步骤
- 下载更新:
git clone https://github.com/shmilylty/OneForAll.git
- 安装依赖
- 使用:
pipenvpip3 install pipenv cd OneForAll/oneforall pipenv install python 3.7.4 pipenv run python oneforall.py --help
- 使用:
pip3cd OneForAll/oneforall pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ python3 oneforall.py --help
- 使用:
如果在安装依赖过程中发现编译某个依赖库失败时可以参考编译失败解决方法,如果还没有解决欢迎加群反馈。
使用示例
1 |
python3 oneforall.py --target example.com run |
使用帮助
命令行参数只提供了一些常用参数,更多详细的参数配置请见config.py,OneForAll命令行界面基于Fire实现。
- oneforall.py:主程序入口
- oneforall.py里有调用aiobrute.py和dbexport.py,为了方便进行子域爆破和数据库导出独立出了aiobrute.py和dbexport.py,这两个文件可以单独运行,并且所接受参数要更丰富一点。
oneforall.py使用帮助
1 |
pipenv run python oneforall.py --help |
aiobrute.py使用帮助
关于泛解析问题处理程序首先会访问一个随机的子域判断是否泛解析,如果使用了泛解析则是通过以下判断处理:
- 一是主要是与泛解析的IP集合和TTL值做对比。
- 二是多次解析到同一IP集合次数(默认设置为10,可以在
config.py
设置大小) - 考虑爆破效率问题目前还没有加上HTTP响应体相似度对比和响应体内容判断 经过测试在16核心的CPU,使用16进程64协程,100M带宽的环境下,设置任务分割为50000,跑两百万字典大概10分钟左右跑完,大概3333个子域每秒。
1 |
pipenv run python aiobrute.py --help |
dbexport.py使用帮助
1 |
pipenv run python dbexport.py --help |
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
D:. | +---.github +---docs | collection_modules.md 收集模块说明 +---images \---oneforall | aiobrute.py 异步多进程多协程子域爆破模块,可以单独运行 | collect.py 各个收集模块上层调用 | config.py 配置文件 | dbexport.py 数据库导出模块,可以单独运行 | domains.txt 要批量爆破的域名列表 | oneforall.py OneForAll主入口,可以单独运行 | __init__.py | +---common 公共调用模块 +---data 存放一些所需数据 | next_subdomains.txt 下一层子域字典 | public_suffix_list.dat 顶级域名后缀 | srv_names.json 常见SRV记录前缀名 | subdomains.txt 子域爆破常见字典 | \---modules +---certificates 利用证书透明度收集子域模块 +---check 常规检查收集子域模块 +---crawl 利用网上爬虫档案收集子域模块 +---datasets 利用DNS数据集收集子域模块 +---dnsquery 利用DNS查询收集子域模块 +---intelligence 利用威胁情报平台数据收集子域模块 \---search 利用搜索引擎发现子域模块 |
原文连接:OneForAll:一款功能强大的子域名收集工具
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。