OneForAll是一款功能强大的子域收集工具
pip config set global.index-url http://pypi.douban.com/pypi/simple/
pip config set global.trusted-host pypi.douban.com
pip install -r .\requirements.txt
用python一定要先切换国内的pip源,可以节约大量时间,而且可以少很多报错。
环境中的python是Python 3.11.5版本,pip是pip 23.2.1 from C:\Users\kali\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)
执行python .\oneforall.py时出现报错
通常sre_parse 是Python标准库 re 的一个内置组件,应该可以在 re 模块中找到。如果 re 模块没有找到 sre_parse,可能是因为你的Python环境有问题,或者是因为 exrex 模块依赖于一个与你的Python版本不兼容的 re 模块版本。
C:\Users\kali\AppData\Local\Programs\Python\Python311\Lib\site-packages\exrex.py,修改组件代码注释掉from re import sre_parse, U
添加import sre_parse即可成功运行。
OneForAll的帮助文件,全英文
INFO: Showing help with the command 'oneforall.py -- --help'.
NAME
oneforall.py - OneForAll help summary page
SYNOPSIS
oneforall.py COMMAND | <flags>
DESCRIPTION
OneForAll is a powerful subdomain integration tool
Example:
python3 oneforall.py version
python3 oneforall.py check
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./domains.txt run
python3 oneforall.py --target example.com --alive False run
python3 oneforall.py --target example.com --brute False run
python3 oneforall.py --target example.com --port medium 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:
--port small/medium/large See details in ./config/setting.py(default small)
--fmt csv/json (result format)
--path Result path (default None, automatically generated)
FLAGS
--target=TARGET
Type: Optional[]
Default: None
One domain (target or targets must be provided)
--targets=TARGETS
Type: Optional[]
Default: None
File path of one domain per line
--brute=BRUTE
Type: Optional[]
Default: None
Use brute module (default True)
--dns=DNS
Type: Optional[]
Default: None
Use DNS resolution (default True)
--req=REQ
Type: Optional[]
Default: None
HTTP request subdomains (default True)
--port=PORT
Type: Optional[]
Default: None
The port range to request (default small port is 80,443)
--alive=ALIVE
Type: Optional[]
Default: None
Only export alive subdomains (default False)
--fmt=FMT
Type: Optional[]
Default: None
Result format (default csv)
--path=PATH
Type: Optional[]
Default: None
Result path (default None, automatically generated)
--takeover=TAKEOVER
Type: Optional[]
Default: None
Scan subdomain takeover (default False)
COMMANDS
COMMAND is one of the following:
check
Check if there is a new version and exit
version
Print version information and exit
找一个二级域名测试一下看看效果,只输出http存活的域名,速度非常的快
python .\oneforall.py --target leapmoto.com --alive True run
python .\oneforall.py --target leapmoto.com --takeover True run
这里说明一下子域名takeover接管。
子域名接管(Subdomain Takeover)是指攻击者发现一个高级别的域名(如 example.com)下的子域名(如 sub.example.com)不再指向原本的设计目标,或者指向的资源不再有效(如服务器已下线),而是能够指向攻击者控制的服务器,从而实现对子域名的非法控制。
子域名接管通常涉及步骤:
发现子域名:攻击者首先通过各种手段(如搜索引擎、子域名探测工具等)找到目标域名的子域名。
确定子域名指向:确认子域名当前指向的服务器或者资源的状态。
分析域名指向的资源:如果指向的服务器已不再有效,或者可以被攻击者控制,那么这个子域名就可能被接管。
接管子域名:通过修改DNS记录(如A记录、CNAME记录等),将子域名指向攻击者控制的服务器。
利用接管的子域名:一旦子域名被成功接管,攻击者就可以利用它进行各种恶意活动,如钓鱼攻击、传播恶意软件、发起DDoS攻击等。
防范子域名接管的办法:
定期检查DNS记录:及时发现并修复不正确的DNS记录。
使用域名注册期的安全措施:如域名注册锁定,防止域名被转移。
使用DNSSEC:为域名启用DNSSEC加密,确保域名解析结果的完整性和真实性。
监控子域名状态:定期检查子域名的指向和服务器状态。
及时更新和修复:对于不再使用的子域名,应及时删除或更新DNS记录;对于指向内部开发环境的子域名,确保开发完成后及时更新记录,避免暴露内部环境。
A记录的其实也存在,一个子域名之前捆绑了一个公网IP,后期公网IP废弃不用,但是DNS解析没有删除,公网IP对应的服务器被攻陷了,那么也会出现域名被接管的问题。