本文目录导读:

SubBrute 是一个用 Python 编写的子域名暴力破解工具,它通过使用字典文件(包含常见的子域名前缀)向 DNS 服务器发送查询请求,从而发现目标域名下的有效子域名。
以下是使用 SubBrute 进行暴力破解子域名的主要步骤和核心机制:
基本使用方法
# 基础命令格式 python subbrute.py <目标域名> [选项] # 示例:暴力破解 example.com 的子域名 python subbrute.py example.com # 使用自定义字典文件 python subbrute.py example.com -w /path/to/your/wordlist.txt # 指定输出文件保存结果 python subbrute.py example.com -o output.txt # 使用多个 DNS 服务器(提高速度和可靠性) python subbrute.py example.com -s /path/to/resolvers.txt
核心参数说明
- `-w`:指定自定义子域名字典文件 - `-o`:指定输出文件路径,将结果保存到文件 - `-s`:指定 DNS 解析器列表文件(每个 IP 一行) - `-t`:设置线程数(默认 100),控制并发请求量 - `-r`:指定递归级别(默认 1),发现子域名后是否继续对其子域名扫描 - `-v`:启用详细输出模式,显示更多调试信息 - `-q`:静默模式,只输出有效的子域名 - `--type`:指定 DNS 记录类型(如 A、AAAA、CNAME 等) - `--exclude-suffix`:排除特定后缀(如 2 级域名)
工作流程详解
SubBrute 的工作机制基于以下步骤:
-
生成目标:从字典文件中读取子域名前缀列表(如
www、mail、admin、ftp等),与目标域名组合形成完整的域名(如www.example.com、mail.example.com)。 -
DNS 查询:向指定的公共 DNS 服务器(如 8.8.8.8、1.1.1.1 等)发送 DNS 请求,查询这些域名是否存在。
-
结果处理:
- DNS 服务器返回 IP 地址(A 记录或 AAAA 记录),则视为子域名存在。
- 如果返回 NXDOMAIN(域名不存在),则忽略。
- 如果返回 SERVFAIL 或超时,可能需要重试或更换 DNS 服务器。
-
递归扫描(可选):如果发现了一个子域名(如
admin.example.com),SubBrute 可以继续对该子域名进行下一级暴力破解(如test.admin.example.com)。
提高效率和隐蔽性的技巧
# 提高并发速度 python subbrute.py example.com -t 200 # 使用高质量的 DNS 解析器列表(绕过速率限制) python subbrute.py example.com -s resolvers.txt -t 50 # 递归扫描 2 级子域名 python subbrute.py example.com -r 2 # 指定记录类型为 CNAME(用于发现 CDN 或别名) python subbrute.py example.com --type CNAME # 排除常见的二级域名后缀(如 .com.cn) python subbrute.py example.com --exclude-suffix .com.cn
所需文件准备
1 子域名字典(wordlist)
这是最重要的部分,常见的字典文件来源:
- SecLists:GitHub 上的著名安全测试字典集合
/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt
- 自己制作:结合目标行业、业务特点生成
- 常用开源字典:
dns-Jhaddix.txt、commonspeak2-subdomains.txt每行一个子域名前缀):www mail admin blog ftp vpn api dev test staging
2 DNS 解析器列表(resolvers)
- 包含可靠的公共 DNS 服务器 IP 地址
- 可以从
https://public-dns.info/nameservers.txt获取 - 或使用自己搭建的 DNS 服务器
- 建议至少 50-100 个不同的 DNS 服务器以避免被限制
输出结果示例
subbrute ownz 13.1.8.0.0.1.3.0.0.2.ip6.arpa - time to load hosts: 0.001s
subbrute ownz 13.1.8.0.0.1.3.0.0.2.ip6.arpa - time to scan: 0.003s
[+] www.example.com -> 192.168.1.1
[+] mail.example.com -> 10.0.0.5
[+] admin.example.com -> 203.0.113.10
注意事项与局限性
1 法律与道德
- 仅在获得授权的情况下使用,对未经授权的目标进行子域名爆破是非法行为。
- 确保目标域名属于你拥有或已获得明确的渗透测试授权。
2 技术局限性
- 字典依赖:无法发现未在字典中出现的子域名。
- DNS 速率限制:大量请求可能导致源 IP 被临时封禁。
- 泛解析问题:有些域名配置了通配符 DNS 记录(
*.example.com指向同一 IP),SubBrute 会误判所有子域名都存在,可以通过验证 DNS 响应中的 IP 是否重复或检查 TTL 值来缓解。 - CDN 和 WAF:部分服务使用 CDN 可能隐藏真实 IP,但子域名本身仍可被发现。
3 优化建议
- 使用
--type A仅查询 IPv4 地址,有时能更快得到结果。 - 配合其他工具(如
amass、dnsrecon、gobuster)使用,提高覆盖率。 - 结合被动收集(证书透明度日志、搜索引擎等)和主动扫描(暴力破解)的方式,效果最佳。
简单示例脚本
#!/bin/bash
# 基本使用流程
domain="$1"
if [ -z "$domain" ]; then
echo "用法: $0 <域名>"
exit 1
fi
# 使用默认字典暴力破解,输出到文件
python subbrute.py "$domain" -o "subdomains_$domain.txt"
# 显示发现的结果
echo "发现的子域名:"
cat "subdomains_$domain.txt"
SubBrute 是一个高效的子域名暴力破解工具,其核心在于优质的字典文件和可靠的 DNS 服务器列表,合理设置线程数和递归级别,可以有效提高发现率,但请始终在法律允许的范围内操作。
标签: 子域名暴力破解