subjack:DNS 接管扫描器
用 Go 编写的 DNS 接管扫描器,可并发批量检测域名是否存在可被劫持的解析配置,适合渗透测试与漏洞赏金场景。
- 浏览
- 6
- 访问
- 0
- 下载
- 0
- 版本
- v3.1.0
- 平台
- Windows、macOS、Linux
详细介绍
项目简介
subjack 是一个用 Go 编写的 DNS 接管扫描器,可以并发扫描一份域名列表,找出其中可能被劫持的条目。借助 Go 的速度与并发能力,它在批量测试大量域名时表现突出。工具会尽量给出结果,但仍需人工复核以排除误报。
主要功能
subjack 可检测以下情况:
- CNAME 接管:指向未被认领的第三方服务的悬空 CNAME
- NS 委派接管:过期的域名服务器域名、以及悬空的云 DNS 托管区(Route 53、Google Cloud DNS、Azure DNS、DigitalOcean、Vultr、Linode)
- 失效 A 记录:指向云厂商(AWS、GCP、Azure、DigitalOcean、Linode、Vultr、Oracle)上已释放 IP 的 A 记录
- 区域传送(AXFR):配置不当、泄漏整份 zone 文件的域名服务器,并会暴力枚举常见 NS 主机名
- SPF include 接管:SPF
include:指令中已过期、可被注册的域名,可能导致邮件伪造 - MX 记录接管:过期的邮件服务器域名,可能导致邮件被拦截
- CNAME 链接管:多级 CNAME 链中中间目标可被认领的情况
- SRV 记录接管:指向过期或可注册域名的 SRV 记录
- NXDOMAIN 注册:不存在的域名且可被注册(通过 available 以 RDAP 确认)
安装与使用
需要先安装 Go。
go install github.com/haccer/subjack@latest
releases 页面也提供 Linux、macOS、Windows 的预编译二进制,适合编译较慢的小型 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 resolver 列表文件(每行一个 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
域名服务器接管
subjack -w subdomains.txt -ns -o results.json
包含两类检查:过期的 NS 域名(攻击者注册该域名即可完全控制目标域名的 DNS),以及悬空的 NS 委派(NS 记录指向云 DNS 厂商但托管区已删除,subjack 会直接向每个域名服务器查询 SOA,若全部返回 SERVFAIL 或 REFUSED 则说明 zone 已不存在)。
陈旧 A 记录检测
sudo subjack -w subdomains.txt -ar -o results.json
检测使用 ICMP ping(需要 root),并以 80/443 端口的 TCP 作为回退。结果标记为 STALE A RECORD,需人工确认——IP 无响应并不一定意味着可被回收。
区域传送检测
subjack -d example.com -axfr -o results.json
subjack -w domains.txt -axfr -o results.json
除测试官方域名服务器外,还会暴力枚举常见主机名(ns1、dns-0、ns-backup 等)。结果标记为 ZONE TRANSFER,并给出存在问题的域名服务器与泄漏记录数。
邮件接管检测
subjack -w domains.txt -mail -o results.json
解析 SPF TXT 记录检查 include: 域名是否过期可注册,并检查 MX 记录目标是否过期可注册。
CNAME 链与 SRV 检测
CNAME 链接管在每次扫描时自动执行,会跟踪最多 10 层 CNAME 链;SRV 记录接管需手动开启 -srv:
subjack -w domains.txt -srv -o results.json
字典格式
字典每行一个子域名:
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 ./...
注意事项
- 扫描结果请务必人工复核,以排除误报。
-ar使用 ICMP 时可能需要 root 权限。-srv会为每个域名增加约 28 次 DNS 查询,默认关闭。- 该工具面向授权的安全测试与漏洞赏金场景,请负责任地使用。
更多背景资料可参考:Can I take over XYZ?、Can I take over DNS?。
项目基于 MIT License 发布。
本作品整理自 GitHub 开源项目 haccer/subjack,原作者 @haccer,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v3.1.0当前版本
扫描速度大幅提升,修正 AXFR 检测与小型 VPS 安装内存溢出问题,可用性检查改用 RDAP;新增 69 项离线测试,-r 支持 host:port,许可证改为 MIT。
评论