mirror of
https://github.com/UzJu/Cloud-Bucket-Leak-Detection-Tools.git
synced 2025-11-05 10:44:04 +00:00
197 lines
6.6 KiB
Markdown
197 lines
6.6 KiB
Markdown
|
|
[TOC]
|
|||
|
|
|
|||
|
|
# 0x00 前言
|
|||
|
|
|
|||
|
|
关于原理上的,可以参考**火线云安全社区**上的文章
|
|||
|
|
|
|||
|
|
+ 阿里云 https://zone.huoxian.cn/d/918-oss
|
|||
|
|
|
|||
|
|
+ KEVIL 腾讯云 https://zone.huoxian.cn/d/949-cos
|
|||
|
|
+ ricky 微软云 https://zone.huoxian.cn/d/940
|
|||
|
|
+ ricky 谷歌云 https://zone.huoxian.cn/d/931
|
|||
|
|
+ TeamsSix Aws https://zone.huoxian.cn/d/907-aws-s3
|
|||
|
|
|
|||
|
|
> 原理都大致相同
|
|||
|
|
|
|||
|
|
个人理解的工具用处就是帮助人解决繁琐的流程,达到自动化
|
|||
|
|
|
|||
|
|
# 0x01 安装
|
|||
|
|
|
|||
|
|
**GitHub**:https://github.com/UzJu/Cloud-Bucket-Leak-Detection-Tools
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
git clone https://github.com/UzJu/Cloud-Bucket-Leak-Detection-Tools
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- pip3 install oss2
|
|||
|
|
- pip3 install colorlog
|
|||
|
|
- pip3 install argparse
|
|||
|
|
- pip3 install dnspython
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
## 1、配置自己的阿里云AK
|
|||
|
|
|
|||
|
|

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

|
|||
|
|
|
|||
|
|
首先会检查传入的参数是存储桶,还是域名
|
|||
|
|
|
|||
|
|
如果是域名
|
|||
|
|
|
|||
|
|
+ 判断解析的CNAME是不是存储桶的地址
|
|||
|
|
|
|||
|
|
如果是存储桶
|
|||
|
|
|
|||
|
|
+ 继续走下面的流程
|
|||
|
|
|
|||
|
|
检测存储桶的名称是否存在,会有以下三种情况
|
|||
|
|
|
|||
|
|
1、存储桶名称不存在
|
|||
|
|
|
|||
|
|
+ 此时会自动调用`self.Exploit.AliyunOssCreateBucket_Exp()`方法劫持存储桶
|
|||
|
|
|
|||
|
|
2、存储桶名称存在
|
|||
|
|
|
|||
|
|
3、存储桶名称不符合规则
|
|||
|
|
|
|||
|
|
#### 1.1、检测功能
|
|||
|
|
|
|||
|
|
**判断是否可以遍历存储桶**
|
|||
|
|
|
|||
|
|
**判断是否拥有获取/上传存储桶的ACL权限**
|
|||
|
|
|
|||
|
|
**判断是否拥有获取/上传存储桶策略的权限**
|
|||
|
|
|
|||
|
|
**判断是否可以上传文件到存储桶**
|
|||
|
|
|
|||
|
|
## 2、单个Target检测与利用
|
|||
|
|
|
|||
|
|
如果使用`-aliyun`作为参数传入一个存储桶地址,就会自动检测
|
|||
|
|
|
|||
|
|

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

|
|||
|
|
|
|||
|
|
此时判断该存储桶不存在,所以会自动创建一个同名称的存储桶,并写入以下策略
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"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上的资产作为演示
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# fofa查询语法
|
|||
|
|
domain="aliyuncs.com"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|

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

|
|||
|
|
|
|||
|
|

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

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

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

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

|
|||
|
|
|
|||
|
|

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