DNS 子域名接管扫描器
Subjack 是一个用 Go 编写的 DNS 接管扫描器,旨在并发扫描域名列表,并识别出可被劫持的域名。借助 Go 的速度和效率,该工具在大规模测试中表现尤为突出。请务必手动复核结果以排除误报。
Subjack 可检测:
include: 指令中已过期的域名,可导致邮件伪造需要 Go
go install github.com/haccer/subjack@latest
subjack -w subdomains.txt -t 100 -timeout 30 -o results.txt -ssl
Subjack 可以从标准输入读取域名,方便与其他工具搭配使用:
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 权限),并回退到 TCP 端口 80/443。
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: 域是否已过期并可注册。攻击者注册被包含的域名后,可以以目标身份发送完全验证通过的邮件,绕过 SPF 和 DMARC。
MX 记录接管:检查 MX 记录目标是否已过期并可注册。攻击者控制邮件服务器后,可以拦截所有入站邮件——包括密码重置、2FA 验证码等。
subjack -w domains.txt -mail -o results.json
这些检查会在每次扫描中自动运行:
CNAME 链接管:追踪多级 CNAME 链(最多 10 层),检查是否有中间目标可认领。标准 CNAME 检测仅检查第一跳——链检测可以发现更深层的接管机会。
SRV 记录接管:检查常见 SRV 记录(SIP、XMPP、LDAP、Kerberos、IMAP、CalDAV 等)的目标是否已过期并可注册。
你可以使用 scanio.sh,它是一个 PoC 脚本,通过 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 接管的额外信息:
| 标志 | 描述 | 默认值 |
|---|
-d | 要检查的单个域名 | |
-w | 子域名列表的文件路径 | |
-t | 并发线程数 | 10 |
-timeout | 连接超时等待秒数 | 10 |
-o | 输出结果到文件(使用 .json 扩展名输出 JSON 格式) | |
-ssl | 强制使用 HTTPS 连接(可能提高准确性) | false |
-a | 对所有 URL 发送请求,而不仅仅是已识别出 CNAME 的 URL (推荐) | false |
-m | 即使域名无法注册也标记死亡的 CNAME 记录 | false |
-r | DNS 解析器列表文件路径(每行一个 IP,失败时回退到 8.8.8.8) | |
-ns | 检查 NS 接管(过期的 NS 域名 + 悬挂的云 DNS 委派) | false |
-ar | 检查指向已失效 IP 的过时 A 记录(ICMP 可能需要 root 权限) | false |
-axfr | 检查区域传输(AXFR),包括 NS 暴力破解 | false |
-mail | 检查 SPF include 和 MX 记录接管 | false |
-v | 显示每个请求的更多信息 | false |