OSS云存储攻防
阿里云OSS对象攻防
简介
阿里云对象储存(OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。数据以对象(Object)的形式存储在OSS的存储空间/存储桶(Bucket )中,并指定Object的文件名(Key)作为其唯一标识。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。
上述概念介绍
Bucket:用户用来管理所存储Object的储物空间。
Object:OSS存储数据的基本单元。
Key:当存储文件(Object)时,需要指定此Object的名称(Key),后续您将通过这个Key来获取该Object的内容。 Key也可以用来模拟文件夹的一些属性。
Data:存储的数据本体。
常见漏洞
1、Bucket权限配置错误-公开访问
在默认情况下创建的Bucket桶是private权限,如果在错误配置的情况下,给了Listobject权限,就会导致可遍历存储桶。

如果选择了””公有读/公有读写”,就会存在两种情况:
1、无法列出对象

但是可以直接访问KEY路径



2、如果想列出Object对象,只需要在Bucket授权策略中设置ListObject即可


这样再当我们访问存储桶域名的时候就会发现,已经把我们存储桶的东西列出来了

2、Bucket桶爆破
当不明确Bucket桶名称时,可以通过爆破获取,类似子域名的枚举。
当对于阿里云OSS 不存在有两种返回情况,分别是 InvalidBucketName 和 NoSuchBucket

InvalidBucketName:表示存储桶的名称不符合规范,属于无效的存储桶名称

NoSuchBucket:表示没有这个存储桶
当存储桶存在时,则会返回以下两种情况


这样通过返回内容的不同,就可以进行 Bucket 名称爆破了,知道 Bucket 名称后,Key 的爆破就类似目录一般爆破即可。
3、特定的Bucket策略配置
特定的策略配置的指的是,如果管理员设置了某些IP,UA才可以请求该存储桶的话,此时如果错误的配置了GetBucketPolicy,可导致攻击者获取策略配置

可以看到我们此时是没有权限访问该存储桶的,不过我们可以尝试使用aliyun的cli(https://shell.aliyun.com)获取policy

我们可以看到,需要符合UserAgent为UzJu才可以访问

4、Bucket Object遍历

如果设置了ListObject,这将会导致Bucket桶被遍历

可通过访问Key,来下载Bucket中所有文件

5、任意文件上传与覆盖
如果在配置存储桶时,管理员错误的将存储桶权限,配置为可写,这将会导致攻击者可上传任意文件到存储桶中,或覆盖已经存在的文件

PUT请求上传任意文件。

GET访问,证明上传文件存在

如果目标的对象存储是 html、XML 文件时,可以通过浏览器自解析html和xml文件的特性,利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作。也可上传其他格式文件,但无法被利用,因为其只有存储文件功能,无法达到解析效果。
6、AccessKeyId,SecretAccessKey泄露
如果目标的 AccessKeyId、SecretAccessKey 泄露,那么就能获取到目标对象存储的所有权限,一般可以通过以下几种方法进行收集:
1、通过GitHub等开源平台中的源代码可发现存在泄露的Key

2、通过反编译APK、小程序,找到敏感信息
3、在目标网站源代码中找到(Js等)

然后在行云管家上直接通过AS、AK接管云存储
或者使用AK、AS利用工具
7、Bucket接管
在阿里云下,当 Bucket 显示 NoSuchBucket 说明是可以接管的,如果显示 AccessDenied 则不行。

假设有以下一种情况,管理员通过域名解析并绑定了一个存储桶,但是管理员将存储桶删除后,没有将域名解析的CNAME删除,这时会访问域名就会出现上面的情况,NoSuchBucket。



现在我们将存储桶删除,就会出现如下情况

现在我们再访问域名会出现如下情况

现在阿里云加了限制,必须在传输管理中配置绑定域名即可。以下情况即可接管该存储桶

当我们访问存储桶的域名时,提示我们NoSuchBucket,这个时候可以登录自己的阿里云账号,创建同样的名称即可


此时我们刷新

已经成功接管了该存储桶,尝试上传文件后配置权限公开访问

8、Bucket 策略配置可写
当我们访问存储桶的时候,会提示我们已经被policy拦截

如果此时配置了存储桶的oss:PutBucketPolicy,就可以更改Deny为Allow即可访问

我们可以看到Effect中设置为Deny,我们只需要vim将它更改为Allow即可

随后使用PUT方法上传

随后我们再使用GET获取

此时我们可以正常看到存储桶中的对象了

9、修改策略导致网站瘫痪
当策略可写的时候,除了上面的将可原本不可访问的数据设置为可访问从而获得敏感数据外,如果目标网站引用了某个 s3 上的资源文件,而且我们可以对该策略进行读写的话,也可以将原本可访问的资源权限设置为不可访问,这样就会导致网站瘫痪了。

此时我们如果可以修改策略,我们只需要将获取该对象的权限修改为Deny,该网站既无法在获取图片,JS等信息了

就无法访问了