子域名接管检测与利用方法论。当目标存在悬挂 CNAME/NS/MX 记录指向已停用的云资源、过期第三方服务或未认领 SaaS 租户时使用。覆盖 CNAME 接管(S3/GitHub Pages/Heroku/Azure/Shopify/Fastly 等 14+ 供应商)、NS 接管(全域控制)、MX 接管(邮件拦截)、通配符 DNS 风险、接管后影响评估(cookie/CORS/CSP/OAuth/TLS)。任何涉及子域名资产清理、DNS 记录审计、域名安全评估的场景都应使用此 skill
相关 skill:SSRF 利用子域名白名单绕过 →
ssrf-methodology;CORS 利用*.target.com→cors-misconfiguration(如有);XSS 利用接管子域 →xss-methodology(如有);Host Header 路由 →http-host-header-attacks
子域名接管发生在:
sub.target.com 有 DNS 记录(CNAME/NS/A)指向外部服务sub.target.com 下的内容影响:cookie 窃取(父域 cookie)、OAuth token 拦截、可信域名钓鱼、CORS 绕过、CSP 绕过。
1. 收集子域名(amass/subfinder/assetfinder/crt.sh/SecurityTrails)
2. 逐个解析 DNS:
dig CNAME sub.target.com +short
3. 对每个 CNAME → 检查目标是否返回 NXDOMAIN 或供应商错误页
4. 用指纹表(第 3 节)匹配错误响应
| 信号 | 含义 |
|---|---|
CNAME → xxx.s3.amazonaws.com + HTTP 404 "NoSuchBucket" | S3 bucket 已删除,可认领 |
CNAME → xxx.herokuapp.com + "No such app" | Heroku 应用已删除 |
CNAME → xxx.github.io + 404 "There isn't a GitHub Pages site here" | GitHub Pages 未认领 |
| CNAME 目标域名本身 NXDOMAIN | 目标域名过期或不存在 |
| CNAME → 供应商但 HTTP 200 + 默认停车页 | 可能可认领 — 需验证 |
| 工具 | 用途 |
|---|---|
subjack | 自动化 CNAME 接管检查 |
nuclei -t takeovers/ | Nuclei 接管检测模板 |
can-i-take-over-xyz(GitHub) | 可接管服务参考列表 |
dnsreaper | 多供应商接管扫描器 |
subzy | 快速子域名接管验证 |
| 供应商 | CNAME 模式 | 指纹(HTTP 响应) | 可接管? |
|---|---|---|---|
| AWS S3 | *.s3.amazonaws.com / *.s3-website-*.amazonaws.com | NoSuchBucket(404) | ✅ 创建同名 bucket |
| GitHub Pages | *.github.io | There isn't a GitHub Pages site here(404) | ✅ 创建 repo + 启用 Pages |
| Heroku | *.herokuapp.com / *.herokudns.com | No such app | ✅ 创建同名 app |
| Azure | *.azurewebsites.net / *.cloudapp.azure.com / *.trafficmanager.net | 各种默认页面/NXDOMAIN | ✅ 注册匹配资源 |
| Shopify | *.myshopify.com | Sorry, this shop is currently unavailable | ✅ 创建 shop + 添加自定义域名 |
| Fastly | CNAME → Fastly edge | Fastly error: unknown domain | ✅ 在 Fastly 添加域名 |
| Pantheon | *.pantheonsite.io | 404 Site Not Found + Pantheon 品牌 | ✅ |
| Tumblr | *.tumblr.com | There's nothing here / Whatever you were looking for doesn't exist | ✅ |
| WordPress.com | CNAME → *.wordpress.com | Do you want to register | ✅ 在 WP.com 认领 |
| Zendesk | *.zendesk.com | Help Center Closed / Zendesk 品牌错误页 | ✅ |
| Unbounce | *.unbouncepages.com | The requested URL was not found | ✅ |
| Ghost | *.ghost.io | 404 Not Found Ghost 错误 | ✅ |
| Surge.sh |
1. 确认:curl -s http://sub.target.com → "NoSuchBucket"
2. 从 CNAME 提取 bucket 名(如 sub.target.com.s3.amazonaws.com → bucket = "sub.target.com")
3. aws s3 mb s3://sub.target.com --region <region>
4. 上传 index.html 证明控制
5. 启用静态网站托管
1. 确认:curl -s https://sub.target.com → "There isn't a GitHub Pages site here"
2. 创建 GitHub 仓库(任意名称)
3. 添加 CNAME 文件内容为 "sub.target.com"
4. 在仓库设置中启用 GitHub Pages
5. 等待 DNS 传播(GitHub 验证 CNAME 匹配)
1. 确认:curl -s http://sub.target.com → "No such app"
2. heroku create <cname-中的-app-name>
3. heroku domains:add sub.target.com
4. 部署 PoC 页面
NS 接管比 CNAME 接管危险得多:控制该区域的全部 DNS 解析。
target.com NS → ns1.expireddomain.com
↓
攻击者注册 expireddomain.com
↓
攻击者控制 target.com 的全部 DNS
(A 记录、MX 记录、TXT 记录 — 一切)
1. 枚举 NS 记录:dig NS target.com +short
2. 检查每个 NS 域名:whois ns1.example.com → 域名是否过期/可注册?
3. 验证:dig A ns1.example.com → NXDOMAIN/SERVFAIL?
4. 检查子委派区域:dig NS sub.target.com
当 MX 记录指向已停用的邮件服务:
target.com MX → mail.deadservice.com(服务已停止)
如果攻击者可以认领 mail.deadservice.com 或邮件租户:
过期的 Google Workspace / Microsoft 365 租户 → MX 仍指向 Google/Microsoft → 攻击者创建新租户并认领该域名。
如果 *.target.com 有通配符 CNAME 指向可认领的服务:
anything.target.com 都可以被接管检测:dig A random1234567.target.com — 如果解析成功,存在通配符。
发现子域名 (sub.target.com)?
├── 解析 DNS 记录
│ ├── 有 CNAME → 外部服务?
│ │ ├── HTTP 响应匹配已知指纹?(第 3 节)
│ │ │ ├── 是 → 在供应商上尝试认领(第 4 节)
│ │ │ │ ├── 认领成功 → 接管确认
│ │ │ │ └── 认领被阻止(名称保留/区域锁定)→ 记录,尝试变体
│ │ │ └── 否 → 服务活跃,无法接管
│ │ └── CNAME 目标 NXDOMAIN?
│ │ ├── 目标是可注册域名?→ 注册 → 完全控制
│ │ └── 目标是活跃供应商的子域名 → 检查供应商认领流程
│ │
│ ├── 有 NS 记录 → 外部 nameserver?
│ │ ├── NS 域名过期/可注册?→ 注册 → 全域接管
│ │ └── NS 域名活跃 → 无法接管
│ │
│ ├── 有 MX → 外部邮件服务?
│ │ ├── 邮件服务已停用/可认领?→ 认领租户 → 邮件拦截
│ │ └── 邮件服务活跃 → 无法接管
│ │
│ └── 有 A 记录 → IP 地址?
│ ├── IP 属于弹性云(AWS EIP/Azure/GCP)?
│ │ ├── IP 未分配?→ 认领 IP → 提供内容
│ │ └── IP 已分配给其他客户 → 无法接管
│ └── IP 属于专用服务器 → 无法接管
│
└── 接管后影响评估
├── 与父域共享 cookie?→ 会话劫持
├── CORS 信任 *.target.com?→ 跨域数据窃取
├── CSP 白名单 *.target.com?→ 通过接管子域 XSS
├── OAuth redirect_uri 允许 sub.target.com?→ Token 窃取
└── 能为 sub.target.com 签发 TLS 证书?→ 完整 MITM
NoSuchBucket(404)才是。sub.target.com CNAME → other.target.com CNAME → dead-service.com — 必须跟踪完整链。include:sub.target.com 且你接管了 sub.target.com,可以修改其 SPF TXT 记录授权你的邮件服务器 → 以 target.com 身份发送伪造邮件。*.surge.shproject not found |
| ✅ |
| Fly.io | CNAME → *.fly.dev | Fly.io 默认 404 | ✅ |