背景介紹:

今天的分享來自國外一名ID為 ELgllad 的白帽子,讓我們來看看他是如何發現和利用漏洞從而獲得賞金的。

由于漏洞報告尚未公開,暫將目標網站統稱為:member.redacted.com

故事開始:

在“https://member.redacted.com/”中,員工可以創建自己的帳戶,但只是創建帳戶,在雇主同意此注冊之前,用戶無法在網站上執行任何操作。

在這種情況下,就需要尋找更多的端點,在注冊成功后的端點為: interview/user/needEmployer 

那么在哪里可以找到更多端點呢?是的,首當其沖的就是 javascript 文件!所以分析 js 文件后成功發現了一些端點:

/dashboard/

/dashboard/myPlansModel

/user/profileMode/

/user/editProfile/

/interview/cart/

/interview/shop/

但是直接訪問這些端點的話,服務器會重定向到第一個端點:

https://member.redacted.com/interview/user/needEmployer

白帽小哥決定嘗試其它方式來訪問這些端點。

首先要明白用戶的權限是什么,用戶只能從 /user/editCredentials 端點更改自己的電子郵件和密碼,但是 /user/editProfile 端點明顯擁有更強大的權限。

因此,基于這一點,來看看請求和響應過程中都發生了什么。

發現端倪:

通過進一步了解,發現下面的API端點是負責授權和帳戶設置的:

https://member-api.redacted.com/member/api/current

在看到任何 false 值后,將其更改為 true 看看會發生什么,因此從響應包中將所有 false 更改為 true 。頁面顯示擁有了更多的功能,如商店、購物車和編輯個人資料等。

這不是妥妥一個繞過注冊漏洞嗎?,但是在點擊購物車或編輯個人資料等功能后,網站再次重定向到了

https://member.redacted.com/interview/user/needEmployer,這意味著我們只繞過了前端功能,后端服務器仍然是拒絕的。

那么來看看點擊商店或購物車等功能后,后端服務器的響應是怎樣的。

HTTP/1.1 403Date: Sat, 05 Aug 2023 17:38:55 GMTContent-Type: application/json;charset=UTF-8….
[{“path”:null,”code”:”forbidden”,”description”:null}]`

響應標頭給出了 403,并在響應正文中顯示了“禁止”。

再次嘗試將響應包中的 403 → 200 OK,并刪除所有響應正文,看看會怎樣。

成功擁有了所有權限:使用所有功能、更改名稱、上傳文件、購買、創建計劃等。

但要訪問任何其他函數或端點,需要每次都替換響應包,因此白帽小哥在 burpsuite 中使用“match and replace”來自動處理所有響應,規則流程如下:

1st.Type: Response BodyMatch: falseReplace: true
2nd.Type: Response BodyMatch: [{"path":null,"code":"forbidden","description":null}]Replace:
3nd.Type: Response HeaderMatch: 403Replace: 200 OK

最后自然是提交漏洞報告,等待賞金確認了。