DNS 接管扫描器
Subjack 是一款用 Go 编写的 DNS 接管扫描器,旨在并发扫描域名列表并识别可被接管的域名。凭借 Go 的速度和效率,该工具在大规模测试方面表现尤为突出。请务必手动复核结果,以排除误报。
Subjack 可检测:
include: 指令中过期的域名,可导致邮件伪造需要 Go
go install github.com/haccer/subjack@latest
Linux、macOS 和 Windows 的预编译二进制文件也可在 releases 页面获取——对于编译速度较慢的小型 VPS 来说非常方便。
subjack -w subdomains.txt -t 100 -timeout 30 -o results.txt -ssl
| 参数 | 描述 | 默认值 |
|---|---|---|
-d | 要检查的单个域名 | |
-w | 子域名字典文件的路径 | |
-t | 并发线程数 | 10 |
-timeout | 连接超时前等待的秒数 | 10 |
-o | 将结果输出到文件(使用 .json 扩展名以输出 JSON) | |
-ssl | 强制使用 HTTPS 连接(可能提高准确性) | false |
-a | 向每个 URL 发送请求,而不仅仅是已识别 CNAME 的 URL (推荐) | false |
-m | 即使域名不可注册,也标记失效的 CNAME 记录 | false |
-r | DNS 解析器列表的路径(每行一个 IP 或 host:port,失败时回退到 8.8.8.8) | |
-ns | 检查 NS 接管(过期的 NS 域名 + 悬空的云 DNS 委派) | false |
-ar | 检查指向失效 IP 的失效 A 记录(ICMP 可能需要 root 权限) | false |
-axfr | 检查区域传送(AXFR),包括 NS 爆破 | false |
-mail | 检查 SPF include 和 MX 记录接管 | false |
-srv | 检查 SRV 记录接管(每个域名增加约 28 次 DNS 查询) | false |
-v | 显示每个请求的更多信息 | false |
Subjack 可以从 stdin 读取域名,便于管道传输其他工具的输出:
subfinder -d example.com | subjack -ssl -o results.json
cat domains.txt | subjack -t 20 -o results.txt
使用 -ns 参数时,subjack 会执行两种类型的域名服务器接管检查:
过期的 NS 域名:检查域名的任何域名服务器是否已过期并可被购买。注册了过期域名服务器的攻击者可以完全控制该域名的所有 DNS——他们可以将任何记录指向任何位置、拦截邮件、签发证书等。
悬空的 NS 委派:检测域名的 NS 记录指向云 DNS 服务商但托管区域已被删除的情况。Subjack 直接向每个域名服务器查询 SOA 记录——如果全部返回 SERVFAIL 或 REFUSED,则该区域已不存在且可能可被认领。支持的服务商:
ns-*.awsdns-*)ns-cloud-*.googledomains.com)ns*-*.azure-dns.*)ns*.digitalocean.com)ns*.vultr.com)ns*.linode.com)subjack -w subdomains.txt -ns -o results.json
使用 -ar 参数时,subjack 会解析 A 记录并检查该 IP 地址是否仍然存活。当公司终止云服务器但忘记删除 DNS A 记录时,该 IP 会被释放回服务商的池中。攻击者可以在该服务商上启动新实例,直到分配到同一个 IP,从而获得该子域名的控制权。
Subjack 会尽可能识别云服务商(AWS、GCP、Azure、DigitalOcean、Linode、Vultr、Oracle),以便更容易地针对正确的平台。检测使用 ICMP ping(需要 root 权限),并在端口 80/443 上使用 TCP 作为回退。
sudo subjack -w subdomains.txt -ar -o results.json
结果会被标记为 STALE A RECORD,应手动验证——无响应的 IP 并不总是意味着可被回收。
使用 -axfr 参数时,subjack 会尝试 DNS 区域传送(AXFR),这可能暴露整个域名的 DNS 记录。Subjack 不仅测试域名的官方域名服务器——它还会爆破常见的域名服务器主机名(ns1、dns-0、ns-backup 等),因为隐藏或被遗忘的域名服务器即使在主域名服务器被锁定后也常常处于未受保护状态。
subjack -d example.com -axfr -o results.json
subjack -w domains.txt -axfr -o results.json
结果会被标记为 ZONE TRANSFER,并附带存在漏洞的域名服务器和暴露的记录数量。
使用 -mail 参数时,subjack 会检查两种基于邮件的接管途径:
SPF include 接管:解析 SPF TXT 记录并检查任何 include: 域名是否已过期并可被注册。注册了被 include 域名的攻击者可以以目标身份发送完全通过认证的邮件,绕过 SPF 和 DMARC。
MX 记录接管:检查任何 MX 记录目标是否已过期并可被注册。控制了邮件服务器的攻击者可以拦截所有入站邮件——密码重置、2FA 验证码等。
subjack -w domains.txt -mail -o results.json
CNAME 链接管在每次扫描时自动运行:它会跟踪多级 CNAME 链(最多 10 层深)并检查任何中间目标是否可被认领。标准 CNAME 检测只检查第一跳——链式检测能捕获更深层的接管机会。
SRV 记录接管需通过 -srv 参数选择启用,因为探测常见的 SRV 位置(SIP、XMPP、LDAP、Kerberos、IMAP、CalDAV 等)每个域名会增加约 28 次 DNS 查询:
subjack -w domains.txt -srv -o results.json
你可以使用 scanio.sh,这是一个概念验证脚本,利用 Rapid7 的 Project Sonar 结果大规模定位存在漏洞的子域名。该脚本会解析并 grep 转储数据以查找所需的 CNAME 记录,并生成一个大型子域名列表,用 subjack 检查它们是否易受恶意子域名接管攻击。请负责任地使用。
你的字典文件应包含一个子域名列表,每行一个:
assets.xen.world
assets.github.com
b.xen.world
big.example.com
cdn.xen.world
dev.xen.world
dev2.twitter.com
测试套件是封闭的——它针对本地 DNS 和 HTTP 测试夹具运行,无需网络:
go test -race ./...
关于 DNS 接管的额外信息:
subjack 基于 MIT License 发布。