文章首發于:火線Zone社區https://zone.huoxian.cn/
作者: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