文章首发于:前线 Zone 社区
作者:UzJu
本文分为两个局部
第一局部介绍 OSS 对象存储攻防的形式
第二局部为实在破绽案例
01 Bucket 权限配置谬误 - 公开拜访
在创立 Bucket 桶时,默认是 private 的权限,如果在谬误的配置下,给了 listobject 权限,就会导致可遍历存储桶。
在此时如果抉择私有读的话,会呈现两种状况:
1、在只配置读写权限设置为私有读或公共读写的状况下,无奈列出对象。
然而能够间接拜访对应的 KEY 门路:
2、如果想列出 Object 对象,只须要在 Bucket 受权策略中设置 ListObject 即可。
这样再当咱们拜访存储桶域名的时候就会发现,曾经把咱们存储桶的货色列出来了。
02 Bucket 桶爆破
当不晓得 Bucket 名称的时候,能够通过爆破取得 Bucket 名称,这有些相似于目录爆破,只不过目录爆破个别通过状态码判断,而这个通过页面的内容判断。
当对于阿里云 OSS 不存在有两种返回状况,别离是 InvalidBucketName 和 NoSuchBucket。
InvalidBucketName:示意存储桶的名称不符合规范,属于有效的存储桶名称。
NoSuchBucket:示意没有这个存储桶。
当存储桶存在时,则会返回以下两种状况
这样通过返回内容的不同,就能够进行 Bucket 名称爆破了,晓得 Bucket 名称后,Key 的爆破也就很容易了。
03 特定的 Bucket 策略配置
特定的策略配置的指的是,如果管理员设置了某些 IP,UA 才能够申请该存储桶的话,此时如果谬误的配置了 GetBucketPolicy,可导致攻击者获取策略配置。
能够看到咱们此时是没有权限拜访该存储桶的,咱们尝试应用 aliyun 的 cli 获取 policy。
咱们能够看到,须要合乎 UserAgent 为 UzJu 才能够拜访。
04 Bucket Object 遍历
如果设置了 ListObject,这将会导致 Bucket 桶被遍历。
可通过拜访 Key,来下载该文件。
05 任意文件上传与笼罩
如果在配置存储桶时,管理员谬误的将存储桶权限,配置为可写,这将会导致攻击者可上传任意文件到存储桶中,或笼罩曾经存在的文件。
如果指标的对象存储反对 html 解析,那就能够利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作。
06AccessKeyId,SecretAccessKey 泄露
如果指标的 AccessKeyId、SecretAccessKey 泄露,那么就能获取到指标对象存储的所有权限,个别能够通过以下几种办法进行收集:
1、通过 GitHub 等开源平台中的源代码可发现存在泄露的 Key
2、通过反编译 APK,找到敏感信息
3、在指标网站源代码中找到(Js 等)
07 Bucket 接管
在阿里云下,当 Bucket 显示 NoSuchBucket 阐明是能够接管的,如果显示 AccessDenied 则不行。
假如有以下一种状况,管理员通过域名解析并绑定了一个存储桶,然而管理员将存储桶删除后,没有将域名解析的 CNAME 删除,这时会拜访域名就会呈现下面的状况,NoSuchBucket。
当初咱们将存储桶删除,就会呈现如下状况:
当初咱们再拜访域名会呈现如下状况
当初阿里云加了限度,必须在传输治理中配置绑定域名即可。以下状况即可接管该存储桶。
当咱们拜访存储桶的域名时,提醒咱们 NoSuchBucket,这个时候能够登录本人的阿里云账号,创立同样的名称即可。
此时咱们刷新
曾经胜利接管了该存储桶,尝试上传文件后配置权限公开拜访。
08 Bucket 策略配置可写
当咱们拜访存储桶的时候,会提醒咱们曾经被 policy 拦挡。
咱们能够看到 Effect 中设置为 Deny,咱们只须要将它更改为 Allow 即可。
随后应用 PUT 办法上传
随后咱们再应用 GET 获取
此时咱们能够失常看到存储桶中的对象了。
09 批改策略导致网站瘫痪
当策略可写的时候,除了下面的将可本来不可拜访的数据设置为可拜访从而取得敏感数据外,如果指标网站援用了某个 s3 上的资源文件,而且咱们能够对该策略进行读写的话,也能够将本来可拜访的资源权限设置为不可拜访,这样就会导致网站瘫痪了。
此时咱们如果能够批改策略,咱们只须要将获取该对象的权限批改为 Deny,该网站既无奈在获取图片,JS 等信息了。
10 实战案例
咱们精心筛选了来自前线平安众测我的项目中,破绽奖金较高的破绽进行举例!
1、阿里云存储桶劫持
此时能够看到拜访该域名显示 NoSuchBucket,那么只须要去阿里云存储桶从新创立一个与 HostID 一样的存储桶名称即可。
随后只须要上传文件,就能够让该域名显示咱们上传的任意文件。
2、反编译小程序,APP 找到泄露的 Key
3、在 JS 文件中找到存在泄露的 AccessKey