OneForAll 使用手册
一、概述
OneForAll 是一款功能强大的子域名收集工具,旨在帮助安全测试人员和网络管理员全面发现目标域名的所有子域名,为后续的安全评估和漏洞测试提供基础支持。它集成了多种子域名发现方法,包括搜索引擎查询、DNS 枚举、API 调用等,能够高效地获取目标域名的子域名信息,并支持结果的导出和分析。
核心功能
- 多源子域名收集:支持从多种来源收集子域名,包括但不限于搜索引擎(Google、Bing 等)、证书透明度日志、DNS 记录查询、API 接口(如 Shodan、Censys 等)以及爆破枚举等方式,确保尽可能全面地发现目标域名的子域名。
- 智能结果处理:自动对收集到的子域名进行有效性验证,排除无效或不存在的子域名,提高结果的准确性。同时,支持对子域名进行分类统计,如按 IP 地址、响应状态码等进行分组,方便用户快速了解子域名的分布情况。
- 灵活的输出格式:支持将结果以多种格式输出,如 CSV、JSON、TXT 等,满足不同场景下的使用需求。用户可以根据需要选择合适的输出格式,以便进一步分析或导入到其他工具中使用。
- 自定义配置:提供丰富的配置选项,允许用户根据实际需求调整收集策略,如设置线程数、超时时间、是否使用爆破等。此外,还支持自定义字典文件,用于子域名爆破,提高发现隐藏子域名的概率。
二、安装与配置
安装环境准备
OneForAll 基于 Python 开发,安装前需确保系统已安装 Python 环境(建议 Python 3.6 及以上版本),同时安装pip
包管理工具(一般 Python 安装时会默认安装)。
安装步骤
- 通过 GitHub 仓库安装
- 打开终端(Linux 或 macOS 系统)或命令提示符(Windows 系统),使用
git
命令克隆 OneForAll 的 GitHub 仓库:
bash
git clone https://github.com/shmilylty/OneForAll.git
- 进入克隆后的目录:
bash
cd OneForAll
- 使用
pip
安装依赖库:
bash
pip install -r requirements.txt
- 打开终端(Linux 或 macOS 系统)或命令提示符(Windows 系统),使用
- 直接下载源码安装
- 若无法使用
git
,也可从 GitHub 仓库页面直接下载源码压缩包,解压后进入解压目录,执行上述pip install -r requirements.txt
命令安装依赖库。
- 若无法使用
配置 API 密钥(可选)
OneForAll 支持使用多种 API 接口来获取子域名信息,如 Shodan、Censys 等。为了获得更全面的结果,建议配置相关 API 密钥:
- 打开 OneForAll 目录下的
config/api_config.yaml
文件。 - 根据文件中的注释,填写相应的 API 密钥信息,如 Shodan 的 API Key、Censys 的 API ID 和 Secret 等。
- 保存文件即可完成 API 密钥的配置。
三、基本使用方法
简单扫描示例
使用 OneForAll 进行子域名扫描的基本命令格式如下:
bash
python3 oneforall.py --target example.com run
其中,--target
参数指定要扫描的目标域名,run
表示执行扫描操作。执行上述命令后,OneForAll 会自动从多种来源收集example.com
的子域名信息,并在扫描完成后显示结果。
指定输出格式
OneForAll 支持多种输出格式,可通过--fmt
参数指定:
bash
python3 oneforall.py --target example.com --fmt csv run
上述命令将扫描结果以 CSV 格式输出,常见的输出格式还包括json
、txt
等。
保存结果到文件
使用--output
参数可以将扫描结果保存到指定文件:
bash
python3 oneforall.py --target example.com --output result.csv run
执行后,扫描结果将保存到result.csv
文件中。
四、高级功能与参数详解
子域名爆破
OneForAll 支持使用字典进行子域名爆破,以发现更多隐藏的子域名:
bash
python3 oneforall.py --target example.com --brute True run
默认情况下,OneForAll 会使用内置的字典文件进行爆破。若需要使用自定义字典,可通过--wordlist
参数指定:
bash
python3 oneforall.py --target example.com --brute True --wordlist /path/to/wordlist.txt run
限制扫描范围
可通过--level
参数限制扫描的子域名层级:
bash
python3 oneforall.py --target example.com --level 2 run
上述命令将只扫描二级子域名(如sub.example.com
),不扫描更深层级的子域名(如sub.sub.example.com
)。
多目标扫描
若需要同时扫描多个目标域名,可使用--targets
参数指定包含多个域名的文件:
bash
python3 oneforall.py --targets /path/to/targets.txt run
其中,targets.txt
文件应包含一行一个的目标域名。
启用 API 收集
若已配置 API 密钥,可通过--api
参数启用 API 收集功能:
bash
python3 oneforall.py --target example.com --api True run
启用后,OneForAll 会使用配置的 API 接口获取子域名信息,提高扫描的全面性。
调整线程数和超时时间
通过--thread
参数可以调整扫描线程数,提高扫描速度:
bash
python3 oneforall.py --target example.com --thread 50 run
使用--timeout
参数可以设置请求超时时间(单位:秒):
bash
python3 oneforall.py --target example.com --timeout 10 run
五、实战案例
案例一:全面扫描单个目标
需求:对example.com
进行全面的子域名扫描,包括 API 查询和爆破,并将结果保存为 JSON 格式。
命令:
bash
python3 oneforall.py --target example.com --api True --brute True --fmt json --output example_result.json run
执行该命令后,OneForAll 会先通过 API 接口获取子域名信息,再使用字典进行爆破,最后将结果以 JSON 格式保存到example_result.json
文件中。
案例二:批量扫描多个目标
需求:对多个目标域名进行批量扫描,并将结果统一保存到一个 CSV 文件中。
步骤:
- 创建一个文本文件
targets.txt
,包含要扫描的多个域名,每行一个域名,例如:
plaintext
example1.com
example2.com
example3.com
- 执行以下命令进行批量扫描:
bash
python3 oneforall.py --targets targets.txt --fmt csv --output batch_result.csv run
扫描完成后,所有目标域名的子域名信息将汇总到batch_result.csv
文件中。
案例三:深度扫描特定层级子域名
需求:扫描example.com
的三级子域名(如sub.sub.example.com
),并使用自定义字典进行爆破。
命令:
bash
python3 oneforall.py --target example.com --level 3 --brute True --wordlist custom_words.txt run
其中,custom_words.txt
是包含自定义子域名前缀的字典文件。
六、注意事项
- 法律合规:在使用 OneForAll 进行子域名扫描时,务必确保获得目标系统所有者的明确授权。未经授权的扫描行为可能违反法律法规,引发法律风险。
- 扫描频率控制:频繁的扫描请求可能会触发目标网站的防护机制(如 WAF),导致 IP 被封禁。因此,在扫描过程中,建议合理控制扫描频率,避免对目标系统造成过大压力。
- 结果验证:尽管 OneForAll 会对收集到的子域名进行有效性验证,但扫描结果仍可能存在误报或漏报情况。对于重要的子域名信息,建议进行人工验证,确保结果的准确性。
- API 使用限制:若使用 API 接口进行子域名收集,需注意各 API 提供商的使用限制和配额。过度使用可能导致 API 密钥被封禁或限制访问。
- 更新工具:OneForAll 会不断更新和优化,定期检查 GitHub 仓库,及时更新工具,以获取新功能和漏洞修复。