用途
本技能用于检测和验证子域接管漏洞,主要针对悬空的 DNS CNAME 记录。当某个 CNAME 指向的第三方服务资源已被删除或未认领时,攻击者可能重新认领该资源并控制对应子域。
适用场景包括:在漏洞赏金项目中做侦察,寻找高影响、低成本的发现;在子域枚举之后逐个检查存活的 CNAME;审计组织 DNS 记录的卫生状况和悬空条目;在产品下线或云迁移后验证 DNS 清理是否完成。
主要能力
识别指向未认领或已下线第三方服务的悬空 DNS CNAME 记录。对每个 CNAME 解析目标地址,将 HTTP 响应与已知易受攻击服务的指纹进行比对,并通过验证资源能否被认领来确认可利用性。覆盖 18 种以上易受攻击服务,包括 GitHub Pages、AWS S3、Heroku、Netlify、Azure(Traffic Manager、Blob、CloudApp)、Shopify、Fastly、Ghost、Pantheon、Tumblr、WordPress.com、Cargo Collective、Surge.sh、Bitbucket、Zendesk、Readme.io 和 Statuspage。
使用方式
前置条件:
- dig(Debian/Ubuntu 属于 dnsutils,RHEL/CentOS 属于 bind-utils):
apt install dnsutils - curl
- httpx(用于批量 HTTP 探测):
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest - 以下自动化扫描器之一:subjack(
go install github.com/haccer/subjack@latest),或带 takeover 模板的 nuclei(go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest后运行nuclei -update-templates)
环境变量:SECSKILL_TARGET_DOMAIN 为目标根域;SECSKILL_SUBDOMAIN_LIST 为子域文件路径(每行一个,可来自子域枚举技能);SECSKILL_OUTPUT_DIR 可选,默认 ./output;SECSKILL_USE_SUBJACK 可选,设为 true 运行 subjack;SECSKILL_USE_NUCLEI 可选,设为 true 运行 nuclei takeover 模板。
工作流程:
- 准备环境,创建输出目录。
- 对所有子域解析 CNAME 记录,找出最终目标;当 CNAME 目标属于已不再提供该资源的第三方服务时,即为悬空记录。
- 通过 HTTP/HTTPS 探测每个带 CNAME 的子域,查找指示资源未认领的服务特定错误响应(内置指纹库,如 github-pages 的 "There isn't a GitHub Pages site here"、s3 的 "NoSuchBucket"、heroku 的 "No such app" 等)。
- 可选:使用 subjack 自动化指纹检测。
- 可选:使用 nuclei 的 takeover 模板包扫描 50 种以上服务。
- 对候选子域进行手动验证,确认资源是否真正未认领(误报常见)。
- 仅在获得域名所有者明确书面授权时,才尝试认领资源,并使用无害的 PoC 页面。
- 记录受影响子域并生成报告(含 CNAME 目标、服务、严重性、修复建议)。
完成条件:输入列表中所有子域均已检查 CNAME;每个带 CNAME 的子域均已探测并比对指纹库;已按配置运行自动化扫描器;每个候选均已手动验证真实可利用性;最终报告列出确认存在漏洞的子域及 CNAME 目标、服务、严重性和修复建议。
限制
子域接管单独通常评为高危(CVSS 约 8.1),若子域处于根域 cookie 作用域、被主应用 CORS 策略信任或被作为脚本来源,可升级为严重,导致会话劫持或对主应用所有用户的 XSS。GitHub Pages 接管最常见且最易验证;AWS S3 桶接管需要知道区域,先尝试 us-east-1。
失败模式及处理:subjack 未找到时需安装并确保 GOPATH/bin 在 PATH;CNAME 解析但 HTTP 无响应时可探测 80、443、8080 端口;指纹匹配但资源已被认领可能是指纹过期或页面部分加载,需手动复查;误报率高时可细化指纹字符串;nuclei 模板缺失时先运行 nuclei -update-templates;dig 返回 NXDOMAIN 表示记录已移除,标记为已修复。
认领的 PoC 资源应在报告被接受或合理报告期(如 7 天无响应)后立即释放。未经授权认领子域在多数司法管辖区构成未授权访问,只能在获得明确书面授权时尝试。
参考资源:nuclei takeover 模板 https://github.com/projectdiscovery/nuclei-templates/tree/main/http/takeovers,subjack https://github.com/haccer/subjack。