从零到一:手把手教你搭建OneForAll子域名侦察环境

张开发
2026/4/18 15:58:15 15 分钟阅读

分享文章

从零到一:手把手教你搭建OneForAll子域名侦察环境
1. 为什么你需要OneForAll在网络安全领域子域名侦察就像是侦探破案前的线索收集工作。想象一下你要调查一个大型企业网络但对方的主网站防守严密这时候找到那些不太受重视的子域名比如test.example.com、dev.example.com往往能成为突破口。这就是为什么安全圈常说子域名是攻击者的后门地图。我刚开始做渗透测试时用过不少子域名扫描工具但要么速度慢得像老牛拉车要么漏报率高得离谱。直到遇到OneForAll这个国产神器它集成了证书透明度、搜索引擎、字典爆破等11种侦察方式实测扫描准确率能达到90%以上。最让我惊喜的是它支持异步并发扫描上次扫一个大型电商平台3万多个子域名20分钟就搞定了。2. 环境准备避开Python版本的地雷2.1 安装Python的正确姿势很多新手在这里栽跟头官方说需要Python 3.8但没告诉你某些依赖库对版本极其敏感。我推荐使用Python 3.8.10这个经过充分验证的版本千万别用3.10后面会解释为什么。Windows用户建议这样操作# 先卸载现有Python winget uninstall Python.Python.3 # 安装指定版本 winget install Python.Python.3.8.10Linux/macOS用户用pyenv会更方便pyenv install 3.8.10 pyenv global 3.8.10注意安装时务必勾选Add Python to PATH否则后面会报找不到命令的错误。我在三个不同系统上测试时这个疏忽浪费了半小时排查时间。2.2 解决Git克隆的玄学问题官方仓库地址是https://github.com/shmilylty/OneForAll但国内直接克隆可能会卡住。这里分享两个实测有效的方法使用Git镜像加速git clone https://ghproxy.com/https://github.com/shmilylty/OneForAll.git如果遇到SSL错误先执行这个再克隆git config --global http.sslVerify false下载完成后你会看到一个包含oneforall.py的文件夹。建议把它放在没有中文和空格的路径比如C:\Tools\OneForAll否则后面可能会遇到各种奇葩编码错误。3. 依赖安装那些官方没告诉你的坑3.1 解决requirements.txt的路径问题按照官方指南直接运行pip install -r requirements.txt十有八九会报not open requirements.txt。这是因为这个文件在OneForAll目录里而你的命令行可能在Scripts目录。我推荐这种一劳永逸的解决方法# 进入项目目录 cd /path/to/OneForAll # 使用绝对路径安装 pip install -r ./requirements.txt如果遇到速度慢可以加上清华源pip install -r ./requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple3.2 搞定sre_parse报错安装完依赖后运行python oneforall.py大概率会遇到这个错误ImportError: cannot import name sre_parse from re这是因为Python 3.10移除了这个模块而exrex库还在使用它。解决方法很简单pip uninstall exrex -y pip install exrex0.11.0这个坑我踩过三次后来专门写了脚本自动处理#!/bin/bash # fix_oneforall.sh pip list | grep exrex pip uninstall exrex -y pip install exrex0.11.04. 实战扫描从单个目标到批量作战4.1 你的第一次扫描试一个无害的测试域名别乱扫真实网站python oneforall.py --target testphp.vulnweb.com run扫描完成后结果会保存在results目录下的CSV文件里。用Excel打开可能会乱码建议用VS Code或Notepad查看。4.2 高级技巧爆破三级域名默认配置只会扫描二级域名要爆破三级域名需要修改config/setting.py# 启用递归扫描 recursive_subdomain True # 设置递归深度 recursive_depth 24.3 批量扫描的工业级方案准备一个targets.txt文件每行一个域名example.com test.org demo.net然后运行python oneforall.py --targets ./targets.txt run对于大型项目建议加上--brute参数启用暴力破解并调整线程数python oneforall.py --target example.com --brute --threads 50 run5. 性能调优与错误处理5.1 加速扫描的三大绝招修改并发参数编辑config/setting.py中的这些值# 网络请求并发数 request_concurrency 50 # 解析并发数 resolve_concurrency 100启用智能休眠防止IP被封enable_sleep True使用代理池需自行搭建enable_proxy True proxy_all True5.2 常见错误解决方案错误1ModuleNotFoundError: No module named xxxx原因依赖没装全解决重新运行pip install -r requirements.txt错误2SSLError(SSLCertVerificationError)原因证书验证失败解决在config/setting.py中添加verify_ssl False错误3扫描结果为空检查目标域名是否存活尝试关闭防火墙临时测试查看logs/oneforall.log找线索6. 结果分析与可视化默认的CSV结果可能不够直观我通常用这个Python脚本生成可视化报告import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(results/example.com.csv) subdomains df[subdomain].value_counts()[:10] subdomains.plot(kindbarh) plt.savefig(report.png)对于专业报告可以配合Aquatone做截图cat results/example.com_subdomains.txt | aquatone -ports xlarge最近我在实际项目中发现把OneForAll和Nmap结合使用效果特别好先用OneForAll发现子域名再用Nmap扫描这些域名的开放端口最后用截图工具自动生成资产地图。这套组合拳在最近一次红队行动中帮我们发现了客户遗漏的测试服务器里面居然存着生产数据库的备份文件。

更多文章