From 54308913c34ad24b345d26e038988d1f4a19d6a3 Mon Sep 17 00:00:00 2001 From: UzJu <50813806+UzJu@users.noreply.github.com> Date: Tue, 8 Mar 2022 23:16:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=95=99=E7=A8=8B=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 使用教程.md | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 使用教程.md diff --git a/使用教程.md b/使用教程.md new file mode 100644 index 0000000..22d65d9 --- /dev/null +++ b/使用教程.md @@ -0,0 +1,197 @@ +[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 + +![image-20220308215429415](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308215429415.png) + +## 1、配置自己的阿里云AK + +![image-20220308225628485](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308225628485.png) + +获取AK后写入config/conf.py文件即可 + +# 0x02 使用方法 + +## 1、整体功能 + +![image-20220308215923624](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308215923624.png) + +首先会检查传入的参数是存储桶,还是域名 + +如果是域名 + ++ 判断解析的CNAME是不是存储桶的地址 + +如果是存储桶 + ++ 继续走下面的流程 + +检测存储桶的名称是否存在,会有以下三种情况 + +1、存储桶名称不存在 + ++ 此时会自动调用`self.Exploit.AliyunOssCreateBucket_Exp()`方法劫持存储桶 + +2、存储桶名称存在 + +3、存储桶名称不符合规则 + +#### 1.1、检测功能 + +**判断是否可以遍历存储桶** + +**判断是否拥有获取/上传存储桶的ACL权限** + +**判断是否拥有获取/上传存储桶策略的权限** + +**判断是否可以上传文件到存储桶** + +## 2、单个Target检测与利用 + +如果使用`-aliyun`作为参数传入一个存储桶地址,就会自动检测 + +![image-20220308221748258](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308221748258.png) + +> 上图可以看到是所有权限都是AccessDenid的状态 + +如果此时我们传入一个不存在的存储桶名称 + +```url +uzjucalksdklfkalsdkf.oss-cn-beijing.aliyuncs.com +``` + +![image-20220308223137080](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223137080.png) + +此时判断该存储桶不存在,所以会自动创建一个同名称的存储桶,并写入以下策略 + +```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}/*" + ] + }] +} +``` + +![image-20220308222443040](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308222443040.png) + +如果存在其他的权限,就如下图 + +![image-20220308223031206](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223031206.png) + +如果我们传入一个域名,首先我们先看一下域名的CNAME + +![image-20220308223416734](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223416734.png) + +随后再直接传入,会自动判断域名的CNAME + +![image-20220308223459947](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223459947.png) + +# 0x03 批量检测 + +### 1、fofa + +用fofa上的资产作为演示 + +```bash +# fofa查询语法 +domain="aliyuncs.com" +``` + +![image-20220308223657071](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223657071.png) + +用工具批量导出出来,这里使用的是`fofa_viewer` + +> GitHub地址:https://github.com/wgpsec/fofa_viewer + +![image-20220308223929730](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308223929730.png) + +![image-20220308224031611](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308224031611.png) + +> 上图中我们可以看到该存储桶没有获取ListObject的权限,但是有PutObject的权限 + +下图中我们可以看到可以获取存储桶的ACL和策略权限 + +![image-20220308224322450](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308224322450.png) + +下图我们可以看到完全拥有存储桶的所有权限,也成功获取到了ACL,存储桶策略 + +> 注意:在批量检测中,我们获取到了存储桶的策略,并不会进行上传新的策略,因为这样会对对方的存储桶造成很严重的后果,这里的原因我也写在了代码里面,在aliyunoss.py中的AliyunOssPutBucketPolicy类 +> +> 为什么在AliyunOssPutBucketPolicy_Exp方法中我们可以随意操作存储桶策略,主要的原因是,我们劫持存储桶之后,虽然是叫劫持,但是该存储桶已经创建在我们自己的账号上了,并不会造成很严重的后果 +> +> ```python +> def AliyunOssPutBucketPolicy(self, getOssResource): +> """ +> PutBucketPolicy +> 危险操作,会更改存储桶的策略组,建议查看AliyunOssgetBucketPolicy来自行判断 +> 是否拥有AliyunOssPutBucketPolicy权限,如果用代码的方式写入会存在问题 +> 1、写入后无法还原(当然这里可以使用备份原有的策略,然后再上传新的策略)这里又会遇到一个新的问题 +> 如果只是存在PutBucketPolicy我们Put后是无法知道对方的ResourceID的 +> +> 所以该函数只在OssBucketExploitFromSDK类中实现了,详情请看AliyunOssPutBucketPolicy_Exp方法 +> """ +> pass +> ``` + +![image-20220308224414889](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308224414889.png) + +随后结果会保存在results目录中,名称为当天日期 + +![image-20220308225047188](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308225047188.png) + +### 2、批量传入域名 + +在fofa上随便找了几个域名 + +![image-20220308225427387](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308225427387.png) + +![image-20220308225459889](https://uzjumakdown-1256190082.cos.ap-guangzhou.myqcloud.com/UzJuMarkDownImageimage-20220308225459889.png) + +如果这些域名中存在权限配置错误,也会检测出来保存到results目录中 + +# 0x04 后续支持 + +## 1、存储桶爆破 + +## 2、存储桶枚举 + +## 3、多云存储结合 + +> 可供多种云存储进行选择 \ No newline at end of file