CBLD云存儲桶利用工具的使用與實戰
CBLD名字亂寫的,我自己都沒想好這個工具叫什么名字,如果有好想法的時候可以在Issue中提出。
目錄概要

0x00 前言
關于原理上的,可以參考以下文章。
- UzJu——阿里云 OSS對象存儲攻防
- ricky——谷歌云對象存儲攻防
- ricky——微軟云對象存儲攻防
- KEVIL——騰訊云COS對象存儲攻防
- TeamsSix——AWS S3 對象存儲攻防
原理都大致相同,個人理解的工具用處就是幫助人解決繁瑣的流程,達到自動化。
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、整體功能

首先會檢查傳入的參數是存儲桶,還是域名
如果是域名
- 判斷解析的CNAME是不是存儲桶的地址
如果與存儲桶
- 繼續走下面的流程
檢測存儲桶的名稱是否存在,會有以下三種情況
- 存儲桶名稱不存在
此時會自動調用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目錄中。
后續支持
- 存儲桶爆破
- 存儲桶枚舉
- 多云存儲結合
可供多種云存儲進行選擇。