CBLD名字乱写的,我自己都没想好这个工具叫什么名字,如果有好想法的时候可以在Issue中提出。
目录概要

0x00 前言
关于原理上的,可以参考以下文章。
原理都大致相同,个人理解的工具用处就是帮助人解决繁琐的流程,达到自动化。
0x01 安装
GitHub:
https://github.com/UzJu/Cloud-Bucket-Leak-Detection-Tools
git clone https://github.com/UzJu/Cloud-Bucket-Leak-Detection-Tools
- pip3 install oss2
- pip3 install colorlog
- pip3 install argparse
- pip3 install dnspython

配置自己的阿里云AK

获取AK后写入config/conf.py文件即可。
0x02 使用方法
1、整体功能

首先会检查传入的参数是存储桶,还是域名
如果是域名
如果与存储桶
检测存储桶的名称是否存在,会有以下三种情况
此时会自动调用self.Exploit.AliyunOssCreateBucket_Exp()方法劫持存储桶。
检测功能
判断是否可以遍历存储桶
判断是否拥有获取/上传存储桶的ACL权限
判断是否拥有获取/上传存储桶策略的权限
判断是否可以上传文件到存储桶
2、单个Target检测与利用
如果使用-aliyun作为参数传入一个存储桶地址,就会自动检测。

上图可以看到是所有权限都是AccessDenid的状态。
如果此时我们传入一个不存在的存储桶名称。
uzjucalksdklfkalsdkf.oss-cn-beijing.aliyuncs.com

此时判断该存储桶不存在,所以会自动创建一个同名称的存储桶,并写入以下策略。
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ f "acs:oss:*:{bucket_info.owner.id}:{self.target}", f "acs:oss:*:{bucket_info.owner.id}:{self.target}/*" ] }]}

如果存在其他的权限,就如下图。

如果我们传入一个域名,首先我们先看一下域名的CNAME。

随后再直接传入,会自动判断域名的CNAME。

0x03 批量检测
1、fofa
用fofa上的资产作为演示:
# fofa查询语法domain="aliyuncs.com"

用工具批量导出出来,这里使用的是fofa_viewer
GitHub地址:https://github.com/wgpsec/fofa_viewer


上图中我们可以看到该存储桶没有获取ListObject的权限,但是有PutObject的权限。
下图中我们可以看到可以获取存储桶的ACL和策略权限。

下图我们可以看到完全拥有存储桶的所有权限,也成功获取到了ACL,存储桶策略。
注意:在批量检测中,我们获取到了存储桶的策略,并不会进行上传新的策略,因为这样会对对方的存储桶造成很严重的后果,这里的原因我也写在了代码里面,在aliyunoss.py中的AliyunOssPutBucketPolicy类。
为什么在AliyunOssPutBucketPolicy_Exp方法中我们可以随意操作存储桶策略,主要的原因是,我们劫持存储桶之后,虽然是叫劫持,但是该存储桶已经创建在我们自己的账号上了,并不会造成很严重的后果。
def AliyunOssPutBucketPolicy(self, getOssResource): """ PutBucketPolicy 危险操作,会更改存储桶的策略组,建议查看AliyunOssgetBucketPolicy来自行判断 是否拥有AliyunOssPutBucketPolicy权限,如果用代码的方式写入会存在问题 1、写入后无法还原(当然这里可以使用备份原有的策略,然后再上传新的策略)这里又会遇到一个新的问题 如果只是存在PutBucketPolicy我们Put后是无法知道对方的ResourceID的
所以该函数只在OssBucketExploitFromSDK类中实现了,详情请看AliyunOssPutBucketPolicy_Exp方法 """ pass

随后结果会保存在results目录中,名称为当天日期。

2、批量传入域名
在fofa上随便找了几个域名


如果这些域名中存在权限配置错误,也会检测出来保存到results目录中。
后续支持
- 存储桶爆破
- 存储桶枚举
- 多云存储结合
可供多种云存储进行选择。