賬戶接管(Account Takeover)漏洞挖掘及實戰案例全匯總

  • 2019 年 10 月 10 日
  • 筆記

1、漏洞理解:

首先澄清兩個容易混淆的術語之間的區別:

身份驗證(Authentication):驗證某人是特定用戶,是否正確提供其安全憑據(密碼,安全問題答案,指紋掃描等)。

授權(Authorization):確認特定用戶可以訪問特定資源或被授予執行特定操作的許可權。

所以,身份驗證是知道實體是誰(who am I),而授權是知道給定實體可以做什麼(what can I do)。後者涉及到的漏洞一般是「越權/IDOR」,本文談論的是前者,身份驗證方面缺陷,最常見也最嚴重的危害是完全的賬戶接管(Account Takeover)。ATO通常發生在金融、電商等行業系統,一旦發生必定是高危級的。

2、漏洞分類

涉及到賬戶認證的功能點一般有:

1)註冊/登錄

2)密碼重置/找回(最常見):簡訊、郵箱

3)賬戶設置:CSRF

4)第三方帳號綁定

5)用戶憑證泄露:CORS、XSS、ClickJacking、重定向等

3、挖掘技巧

挖掘賬戶接管漏洞的思路是:

1、 關注涉及到用戶鑒權的功能;

2、 理清功能的邏輯以及請求參數含義,猜測後端的驗證邏輯;

3、 增刪修改參數,比較回顯的異同,尋找規律,確定邏輯是否可繞過。

4、實戰案例

1)註冊:Instagram暴力破解密碼

Instagram允許通過其網站進行註冊,使用密碼passwd進行註冊,註冊成功後重放此數據包,顯示「此認證屬於一個激活的帳號」:

刪除請求中除「username」和「password」之外的所有參數後,使用正確的密碼和一個不正確的密碼重放,回顯不一致,錯誤密碼顯示錯誤:

正確密碼顯示同上「已被激活」:

從而通過爆破獲取正確密碼:

2)Facebook驗證碼暴力破解

Facebook的主站設置速率限制及鎖定機制,但子域beta.facebook.com通過簡訊/郵件找回密碼時,驗證碼OTP未進行速率限制,導致有效時間內可爆破6位驗證碼:

爆破成功跳轉進入設置新密碼介面:

3)郵箱設置+CSRF

CSRF漏洞(傳送門)中有涉及,/signup/email的API端點將賬戶與郵箱關聯,構造csrf poc:

綁定郵箱後進行密碼重置從而接管賬戶。

4)修改返回包

經典的前端驗證繞過,要注意對於多過程的驗證邏輯,操作是在Burp Suite請求包處右鍵—>Do intercept—>Response to this request。

如忘記密碼,獲取簡訊驗證碼後填寫錯誤驗證碼,返回401:

將返回包中狀態碼401改為200,依舊失敗:

將整個返回包修改為200,成功進入填寫新密碼的頁面:

TIPS:可先探測操作成功的返回包,並將錯誤返回進行整包替換。

5)CORS竊取session token

若某個端點返回涉及到用戶身份的token令牌,則可嘗試通過CORS配置不當進行竊取,關於CORS可參考之前文章(傳送門)。

6)HPP任意密碼重置

重置密碼處結合HPP思路(傳送門),請求

https://hq.breadcrumb.com/api/v1/password_reset參數:

{"email_address":["[email protected]","[email protected]"]}重複郵箱地址可將重置密碼鏈接發往兩個郵箱。

另一個參數相關的Paypal漏洞:使用其他方式如密保方式找回密碼:

請求包中將兩個密保參數SecurityQuestion刪除:

成功繞過驗證:

7)open redirect竊取jwt

開放重定向的其一利用手段(傳送門),在用戶登錄之後再次請求登錄跳轉鏈接:

發現Location附帶了用戶憑證jwt,只要獲取這個token值就獲取了用戶許可權:

誘使用戶點擊跳轉,訪問受害者伺服器的PHP文件,內容為:

攻擊者通過查看日誌獲取受害者token,從而接管帳號。

8)有規律可循的重置鏈接

印度一家大型公司的業務系統,發往郵箱的重置密碼鏈接為:

http://www.xxx.com/account/resetpassword/?id=254346&token=dmFydW4wOTgxMUBnbWFpbC5jb20=&vit=MjAxNi8xMC8yNQ=

解碼後發現token為帳號的base64密文,vit為超時時間,修改參數可進行任意帳號密碼重置。

5、漏洞防禦

了解漏洞的防禦辦法對於滲透工作者尤為重要,明白漏洞防禦的各種手段,就能在挖掘中清楚哪些修復是「可以繞過」以及哪些是需要「儘早放棄」的。

比如對於身份驗證,採用高複雜度的密碼機制往往好過於雙因素驗證;任何涉及身份驗證的端點都要在設置嚴格的速率限制或鎖定機制;對於密碼修改,驗證舊密碼是最好的辦法;如採用了驗證碼機制要保證不被繞過;任何重要驗證是否都是在伺服器完成的等等。