介绍
OSS是阿里云提供的对象存储服务(Object Storage Service),其提供了安全、稳定、可扩展、低延迟、低成本的云存储服务。OSS可以支持海量文件的上传和下载,适用于图片、音视频、日志、备份等场景。同时OSS还提供了多种API和工具来方便用户管理和使用对象存储服务。
试用
阿里云OSS业务新用户免费试用,20G三个月。

请求包容量规格20W次

创建Bucket

进入存储桶,上传图片测试

1、AK(AccessKey)、SK(SecretKey)泄露导致权限接管
开启RAM后台登录,创建用户

权限管理新增授权,增加OSS权限

创建AccessKey

当Accesskey ID和AccessKey Secret泄露会导致OSS直接被接管,ECS利用工具可参考:
ECS的工具相对来说自写比较简单
OSS利用工具参考
CF工具,目前github项目地址已删除,部分星球和公众号还有

设置之后直接登录即可

获取到存储桶的控制权限。
实战中的泄露一般大概率可以关注的点而在于
- 小程序APPID和SK的泄露接管小程序
- Nacos中的配置文件的泄露
- Spring框架AK和SK的泄露
- 等
2、配置不当导致的Bucket信息泄露
私有状态下访问存储桶,因为此时上传图片的时候选择状态是继承Bucket
继承Bucket是指在创建一个新的Bucket时,可以选择将其设置为已存在Bucket的子Bucket。这样,新创建的Bucket将继承父Bucket中存储空间的访问权限和生命周期规则等属性。同时,父Bucket也可以对子Bucket进行一些授权管理,如授予/撤销访问权限,设置防盗链规则等。
继承Bucket的主要优势在于可以实现Bucket之间共享配置,避免重复设置,提高管理效率。此外,对于需要严格控制访问权限的应用场景,继承Bucket还可以降低安全风险,避免因手误或配置错误导致的数据泄露等问题。

当前无权限。当选择公共读

设置新增Bucket策略

当操作不包含ListObject操作的时候是无访问存储桶数据Contents

当操作包含ListObject操作的时候是可以未授权访问存储桶数据Contents


这里未授权的成因是:
阿里云的ListObjects是Object Storage Service (OSS)提供的API之一,它可以列出Bucket中的所有对象(包括文件和目录)。通过调用ListObjects API,你可以获取到Bucket中所有对象的基本信息,如名称、大小、修改时间等。此外,ListObjects还支持各种筛选条件和参数设置,以便更精确地查询和过滤所需的对象列表。这个API可以用于云存储服务中的对象管理、备份恢复、数据分析等场景。
可以发现,策略的这三种配置都是可以造成未授权访问的

当获取到key
后可对存储桶内的文件进行下载

3、Bucket爆破
我感觉比较鸡肋,这种爆破方式在信息搜集阶段可能有用,当目标运维创建命名规则可能会造成存储桶泄露,虽然Bucket是唯一的,但是在实战攻防中意义不大。


这两种回显代表了两种状态,第一种存储同存在,无访问权限,第二种回显代表该存储桶无人使用。

是可以创建的。
4、策略配置不当导致信息泄露
aliyun oss bucket-policy oss://ggoodstudy --method get --endpoint oss-cn-beijing.aliyuncs.com

这是该存储桶的策略配置,配置policy,写一个json文件,Bucket-policy的文件内容为json格式
{
"Version": "1",
"Statement": [
{
"Principal": [
"*"
],
"Effect": "Allow",
"Resource": [
"acs:oss:*:1978639182793372:ggoodstudy"
],
"Condition": {
"StringEquals": {
"acs:UserAgent": "Betta"
}
},
"Action": [
"oss:GetObject",
"oss:ListObjects"
]
}
]
}
命令行创建Bucket策略
aliyun oss bucket-policy oss://ggoodstudy --method put ./user-agent-policy.json --endpoint oss-cn-beijing.aliyuncs.com
查询策略状态
aliyun oss bucket-policy oss://ggoodstudy --method get --endpoint oss-cn-beijing.aliyuncs.com

设置成功,直接访问时的状态为“无权限”

构造数据包,增加字段
GET / HTTP/1.1
Host: ggoodstudy.oss-cn-beijing.aliyuncs.com
User-Agent:Betta
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Pragma: no-cache
Cache-Control: no-cache
可访问存储桶内数据

{
"Version": "1",
"Statement": [
{
"Principal": [
"*"
],
"Effect": "Allow",
"Resource": [
"acs:oss:*:1978639182793372:ggoodstudy"
],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["1.1.1.10"]
}
},
"Action": [
"oss:GetObject",
"oss:ListObjects"
]
}
]
}
该策略可确认源IP为1.1.1.10
的可访问存储桶
5、不安全的接入点策略导致的信息泄露(条件限制多)
创建接入点

但是授权用户需满足拥有以下权限
oss:CreateAccessPoint
oss:GetAccessPoint
oss:DeleteAccessPoint
oss:ListAccessPoints
oss:PutAccessPointPolicy
oss:GetAccessPointPolicy
oss:DeleteAccessPointPolicy
oss:PutBucketPolicy
oss:GetBucketPolicy
oss:DeleteBucketPolicy
创建权限接点委派策略

构造数据包访问资源
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:1978639182793372:ggoodstudy",
"acs:oss:*:1978639182793372:ggoodstudy/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointArn": [
"acs:oss:cn-beijing:1978639182793372:accesspoint/test"
]
}
}
}]
}
授予RAM用户访问即可实现对存储桶内敏感数据的访问,请求OSS资源需构造数据包
GET /ceshi HTTP/1.1
Host: test-0429e53969abbbd1a10a9c8304e449ba1a-ossalias.oss-cn-beijing.aliyuncs.com
Date: Mon, 18 Mar 2024 08:30:00 GMT
Authorization: OSS <AK>:<SK>
代码如下:
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
public class OSSExample {
public static void main(String[] args) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// RAM用户的AccessKeyId和AccessKeySecret。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 指定要访问的存储桶名称和对象名称。
String bucketName = "<yourBucketName>";
String objectName = "<yourObjectName>";
// 根据需要设置GetObjectRequest参数。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
// 下载存储桶中的对象并输出内容。
System.out.println(ossClient.getObject(getObjectRequest).getObjectContent());
// 关闭OSSClient。
ossClient.shutdown();
}
这里可以看出当要访问存储桶中的内容还需要三个条件
详细的OSS鉴权策略可参考
