exploiting-broken-link-hijacking
通过识别对过期域名、已停用云资源和失效外部服务的引用,发现并利用断链劫持(Broken Link Hijacking)漏洞,攻击者可申领这些资源。
Best use case
exploiting-broken-link-hijacking is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
通过识别对过期域名、已停用云资源和失效外部服务的引用,发现并利用断链劫持(Broken Link Hijacking)漏洞,攻击者可申领这些资源。
Teams using exploiting-broken-link-hijacking should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/exploiting-broken-link-hijacking/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How exploiting-broken-link-hijacking Compares
| Feature / Agent | exploiting-broken-link-hijacking | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
通过识别对过期域名、已停用云资源和失效外部服务的引用,发现并利用断链劫持(Broken Link Hijacking)漏洞,攻击者可申领这些资源。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 利用断链劫持漏洞(Exploiting Broken Link Hijacking)
## 适用场景
- 审计 Web 应用程序中对过期或未申领外部资源的引用时
- 对第三方脚本和资源依赖项进行供应链安全评估期间
- 通过悬空 CNAME 记录测试子域名接管机会时
- 在漏洞奖励(bug bounty hunting)计划中寻找断链劫持漏洞时
- 评估生产应用程序中外部资源依赖的安全性时
## 前置条件
- 用于发现所有外部链接的 Web 爬虫(Burp Suite Spider、Scrapy)
- 用于检查 CNAME 记录和域名可用性的 DNS 查询工具
- 用于申领过期域名的域名注册商访问权限(作为概念验证)
- 了解 CDN 和云服务供应(S3、Azure Blob、GitHub Pages)
- blc(broken-link-checker)或类似工具用于自动链接验证
- 了解容易受到子域名接管攻击的服务(can-i-take-over-xyz)
## 工作流程
### 步骤 1:爬取并提取所有外部引用
```bash
# 使用 broken-link-checker 发现失效链接
npx broken-link-checker http://target.com --recursive --ordered \
--exclude-internal --filter-level 3 -o broken_links.txt
# 从页面源码提取所有外部链接
curl -s http://target.com | grep -oP 'https?://[^"'"'"'\s>]+' | sort -u > all_links.txt
# 提取 JavaScript 源文件
curl -s http://target.com | grep -oP 'src="[^"]*"' | grep -v target.com > external_scripts.txt
# 提取 CSS 引用
curl -s http://target.com | grep -oP 'href="[^"]*\.css"' | grep -v target.com > external_css.txt
# 使用 Wayback Machine 获取历史外部引用
curl -s "https://web.archive.org/web/timemap/link/http://target.com" | \
grep -oP 'https?://[^>]+' | sort -u > historical_links.txt
# 使用 Burp Suite 爬取
# 配置 Spider 范围包含 target.com
# 查看 Site Map > 按"External"过滤以列出所有外部引用
```
### 步骤 2:识别失效或可申领的资源
```bash
# 检查外部域名是否已注册
for domain in $(cat external_domains.txt); do
whois $domain 2>/dev/null | grep -qi "no match\|not found\|available" && \
echo "[可申领] $domain"
done
# 检查外部链接的 HTTP 状态
while read url; do
status=$(curl -o /dev/null -s -w "%{http_code}" "$url" --max-time 5)
if [ "$status" = "000" ] || [ "$status" = "404" ]; then
echo "[失效] $url (状态: $status)"
fi
done < all_links.txt
# 检查悬空 CNAME 记录
for sub in $(cat subdomains.txt); do
cname=$(dig +short CNAME $sub)
if [ -n "$cname" ]; then
resolved=$(dig +short $cname)
if [ -z "$resolved" ]; then
echo "[悬空] $sub -> $cname (未解析)"
fi
fi
done
# 检查云资源可用性
# AWS S3 存储桶
aws s3 ls s3://target-assets 2>&1 | grep -q "NoSuchBucket" && echo "[可申领] S3: target-assets"
```
### 步骤 3:检查特定服务的接管可能性
```bash
# 检查 GitHub Pages 接管
# 如果 CNAME 指向 <user>.github.io 且返回 404
curl -s https://subdomain.target.com | grep -q "There isn't a GitHub Pages site here"
# 检查 AWS S3 接管
curl -s http://subdomain.target.com | grep -q "NoSuchBucket"
# 检查 Azure Blob Storage
curl -s http://subdomain.target.com | grep -q "The specified container does not exist"
# 检查 Heroku
curl -s http://subdomain.target.com | grep -q "No such app"
# 检查 Shopify
curl -s http://subdomain.target.com | grep -q "Sorry, this shop is currently unavailable"
# 使用 subjack 进行自动化接管检测
subjack -w subdomains.txt -c fingerprints.json -t 100 -o takeover_candidates.txt
# 使用 nuclei 接管模板
subfinder -d target.com -silent | nuclei -t http/takeovers/ -o takeovers.txt
```
### 步骤 4:验证外部脚本劫持
```bash
# 检查外部 JavaScript 域名是否可注册
curl -s http://target.com | grep -oP 'src="https?://([^/"]+)' | \
cut -d'/' -f3 | sort -u | while read domain; do
whois "$domain" 2>/dev/null | grep -qi "no match\|available" && \
echo "[可劫持脚本] $domain 被 target.com 加载"
done
# 检查 npm/CDN 包引用
curl -s http://target.com | grep -oP 'unpkg\.com/[^@/]+' | sort -u
curl -s http://target.com | grep -oP 'cdn\.jsdelivr\.net/npm/[^@/]+' | sort -u
# 验证引用的包是否仍然存在
# 检查 npm 注册表中已废弃或已删除的包
```
### 步骤 5:利用断链(仅授权测试)
```bash
# 对于过期域名:注册该域名
# 对于 S3 存储桶:在同一区域创建同名存储桶
aws s3 mb s3://target-expired-bucket --region us-east-1
# 对于 GitHub Pages:创建匹配名称的仓库
# 创建带有概念验证内容的 <org>.github.io 仓库
# 对于未申领的社交媒体:申领该账号
# 用良性概念验证内容记录接管过程
# 提供概念验证内容
echo "<html><body><h1>断链劫持 PoC - [您的名字]</h1></body></html>" > index.html
# 上传到已申领的资源
```
### 步骤 6:评估影响并报告
```bash
# 根据资源类型确定影响:
# - 外部 JavaScript:对所有加载该脚本的页面实施完整 XSS
# - 外部 CSS:UI 篡改,通过 CSS 注入进行数据外泄
# - 外部图片/资源:钓鱼、追踪
# - CNAME 子域名:Cookie 窃取、钓鱼、OAuth 绕过
# 检查被劫持资源是否为父域名提供 Cookie
# 检查被劫持子域名是否在 OAuth 重定向白名单中
# 验证被劫持域名是否接收敏感 Referer 头
```
## 核心概念
| 概念 | 定义 |
|---------|-------------|
| 断链劫持(Broken Link Hijacking) | 申领目标网站引用的外部资源的控制权 |
| 悬空 CNAME(Dangling CNAME) | 指向未申领或已停用服务的 DNS CNAME 记录 |
| 子域名接管(Subdomain Takeover) | 通过供应 CNAME 指向的服务来申领子域名 |
| 外部脚本劫持(External Script Hijacking) | 注册目标加载的 JavaScript 所在的过期域名 |
| 供应链攻击(Supply Chain Attack) | 通过入侵外部依赖项来注入恶意内容 |
| 失效链接(Dead Link) | 返回 404 或 DNS 解析失败的 URL 引用 |
| 资源指纹识别(Resource Fingerprinting) | 通过错误消息和响应头识别特定云服务 |
## 工具与系统
| 工具 | 用途 |
|------|---------|
| broken-link-checker | 通过 Web 爬取自动发现断链 |
| subjack | 子域名接管检测工具 |
| nuclei | 基于模板的接管检测扫描器 |
| can-i-take-over-xyz | 容易受到接管攻击的服务的社区数据库 |
| BadDNS | 用于检测域名/子域名接管的 DNS 审计工具 |
| Wayback Machine | 用于发现过去外部引用的历史 URL 分析 |
## 常见场景
1. **JavaScript 供应链** — 注册目标加载的 JavaScript 所在的过期域名;注入影响所有访客的恶意代码
2. **S3 存储桶接管** — 申领目标引用的已删除 AWS S3 存储桶;提供恶意内容或窃取上传的数据
3. **GitHub Pages 劫持** — 创建匹配悬空 CNAME 的 GitHub Pages 仓库,在目标子域名上提供钓鱼页面
4. **社交媒体冒充** — 申领目标网站链接的未申领社交媒体账号进行品牌冒充
5. **CDN 包劫持** — 申领通过 CDN URL 引用的已废弃 npm 包以注入恶意 JavaScript
## 输出格式
```
## 断链劫持报告
- **目标**: http://target.com
- **外部链接总数**: 145
- **失效链接**: 12
- **可劫持资源**: 3
### 发现
| # | 资源 | 类型 | 状态 | 影响 |
|---|----------|------|--------|--------|
| 1 | analytics.expired-domain.com | JavaScript | 域名可注册 | 完整 XSS |
| 2 | assets.target.com -> S3 存储桶 | 静态资源 | 存储桶已删除 | 内容注入 |
| 3 | blog.target.com -> GitHub Pages | 子域名 | 无 GitHub 仓库 | 子域名接管 |
### 修复建议
- 删除对已停用外部资源的引用
- 删除未使用子域名的悬空 CNAME 记录
- 为外部脚本实施子资源完整性(SRI)
- 定期审计外部依赖项的可用性
- 使用 Content Security Policy 限制允许的脚本来源
```Related Skills
testing-for-broken-access-control
系统性测试 Web 应用程序中的访问控制缺陷,包括权限提升、缺失的功能级检查以及不安全的直接对象引用。
testing-api-for-broken-object-level-authorization
测试REST和GraphQL API中的越权对象访问(BOLA/IDOR)漏洞,即已认证用户通过操纵API请求中的对象标识符 来访问或修改属于其他用户的资源。测试人员拦截API调用,识别对象ID参数(数字ID、UUID、slug), 并系统性地替换为其他用户的ID,以确定服务器是否执行了对象级授权。 对应OWASP API安全Top 10 2023 API1(越权对象访问)。
exploiting-zerologon-vulnerability-cve-2020-1472
利用 Netlogon 远程协议中的 Zerologon 漏洞(CVE-2020-1472),通过将机器账户密码重置为空来实现域控制器入侵。
exploiting-websocket-vulnerabilities
在授权安全评估中测试 WebSocket 实现的身份验证绕过、跨站劫持、注入攻击和不安全消息处理。
exploiting-vulnerabilities-with-metasploit-framework
Metasploit Framework 是全球最广泛使用的渗透测试平台,由 Rapid7 维护,包含超过 2300 个漏洞利用模块、1200 个辅助模块和 400 个后渗透模块
exploiting-type-juggling-vulnerabilities
利用 PHP 宽松比较运算符导致的类型转换漏洞,通过类型强制攻击绕过身份验证、规避哈希验证并操纵应用程序逻辑。
exploiting-template-injection-vulnerabilities
检测并利用 Jinja2、Twig、Freemarker 等模板引擎中的服务器端模板注入(SSTI)漏洞,实现远程代码执行。
exploiting-sql-injection-with-sqlmap
在授权渗透测试中使用 sqlmap 检测并利用 SQL 注入漏洞以提取数据库内容。
exploiting-sql-injection-vulnerabilities
在授权渗透测试中,使用手动技术和 sqlmap 等自动化工具识别并利用 Web 应用程序中的 SQL 注入漏洞。测试人员通过基于错误、基于联合、布尔盲注和时间盲注技术,在所有主要数据库引擎(MySQL、PostgreSQL、MSSQL、Oracle)中检测注入点,以演示数据提取、认证绕过和潜在的远程代码执行。
exploiting-smb-vulnerabilities-with-metasploit
在授权渗透测试中,使用 Metasploit Framework 识别并利用 SMB 协议漏洞, 演示企业网络中未打补丁的 Windows 系统、错误配置的共享和弱认证带来的风险。
exploiting-server-side-request-forgery
在授权渗透测试中识别并利用 SSRF 漏洞,访问内部服务、云元数据及受限网络资源。
exploiting-race-condition-vulnerabilities
使用 Turbo Intruder 的单包攻击技术检测并利用 Web 应用程序中的竞态条件漏洞,绕过速率限制、重复交易以及利用检查时间与使用时间(TOCTOU)缺陷。