任意使用者密碼重置(一):重置憑證洩漏

FLy_鵬程萬里發表於2018-06-05

前言

在邏輯漏洞中,任意使用者密碼重置最為常見,可能出現在新使用者註冊頁面,也可能是使用者登入後重置密碼的頁面,或者使用者忘記密碼時的密碼找回頁面。其中,密碼找回功能是重災區。我把日常滲透過程中遇到的案例作了漏洞成因分析,這次,關注因重置憑證洩漏導致的任意使用者密碼重置問題。

案例一

用郵件找回密碼時,作為重置憑證的驗證碼在 HTTP 應答中下發客戶端,抓包後可輕易獲取。先用攻擊者賬號走一次密碼找回流程,測試賬號 yangyangwithgnu@yeah.net 選用郵箱找回密碼:


點選獲取校驗碼後抓取如下應答:


其中,VFCode 從字面理解很可能是校驗碼。登入郵箱檢視網站發過來的密碼找回郵件:


發現兩者一致,那麼,幾乎可以確認服務端將密碼找回的校驗碼洩漏至客戶端,可導致任意賬號密碼重置問題。

嘗試找回普通賬號的密碼。密碼找回首頁輸入郵箱後,系統將立即校驗該郵箱是否註冊:


將 UName 引數定義為列舉變數,以常見 qq 郵箱作為字典,可列舉出多個有效郵箱:


以 chenwei@qq.com 為例,在應答包中找到校驗碼,成功將其密碼重置為 PenTest1024,驗證可登入:



嘗試找回管理員賬號的密碼。從該網站的域名註冊資訊中找到聯絡人的郵箱為 fishliu@xxxx.cn,可推測後臺使用者的郵箱字尾為 @xxxx.cn,所以,用常見後臺使用者名稱簡單調整可構造出後臺使用者郵箱字典,列舉出大量後臺使用者:


同理可重置這些後臺使用者的賬號密碼,為避免影響業務,不再實際操作。

案例二

用郵件找回密碼時,帶憑證的重置連結洩漏至客戶端,抓捕可獲取。用攻擊者賬號走一次密碼找回流程。在找回密碼頁面輸入攻擊者賬號及其郵箱(yangyangwithgnu、yangyangwithgnu@yeah.net)後提交:


攔截如下應答:


顯然是個重定向,isVerify、PassPhrase 這兩個引數很可疑,後續互動中應留意,先放包,進入傳送重置郵件的頁面,輸入驗證碼後提交。登入攻擊者郵箱檢視重置郵件:


這個帶 token 的重置連結似曾相識,對,就是前面抓包獲取的 token 資訊,比對看下:

forgotPwdEa.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8
forgotPwdEc.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8

唯一區別 forgotPwdEa 和 forgotPwdEc 兩個檔名。

接下來驗證通過服務端洩漏的 token 能否重置普通使用者的賬號密碼。從重置流程可知,要重置密碼必須提供使用者名稱及其郵箱(或手機號)。

獲取有效使用者名稱。註冊頁面中,輸入使用者名稱後立即校驗該使用者名稱是否被佔用:


對應請求、應答如下:


使用者名稱已存在返回 failed,不存在返回 ok。以此特徵,用常見國人姓名字典,可列舉出大量有效使用者名稱(如 chenchuan、chenanqi、chenanxiu、zhangfeng 等等),存為 username.txt。

獲取有效使用者名稱對應郵箱。密碼找回首頁提交的請求中,user_name 與 email 引數匹配情況下,HTTP 應答程式碼為 302,互動包如下:

可以此特徵列舉有效使用者名稱及其郵箱。現在考慮如何製作郵箱字典?很多使用者喜歡用使用者名稱註冊 qq 郵箱,換言之,使用者名稱 yangyangwithgnu 可能對應郵箱 yangyangwithgnu@qq.com。所以,用前面已經獲取有效使用者名稱字典 username.txt 快速製作了郵箱字典 qq-email.txt,其中,username.txt 與 qq-email.txt 逐行對應。

例如,前者第一行為 yangyangwithgnu、後者第一行為 yangyangwithgnu@qq.com。將上面的資料包放入 burp 的 intrduer 中,攻擊型別選 pitchfork、user_name 的引數值定義為列舉變數 1 並載入字典 username.txt、email 的引數值定義為列舉變數 2 並載入字典 qq-email.txt,可列舉出大量有效使用者名稱/郵箱資訊,如,zhangfeng/zhangfeng@qq.com、chenchuan/chenchuan@qq.com 等等。

用普通賬號 chenchuan/chenchuan@qq.com 演示密碼重置漏洞。輸入使用者名稱、密碼提交,正常完成密碼找回邏輯,從互動包中獲取服務端下發的重置 token:

isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa 

拼裝為重置連結 
http://www.xxxx.com/user/forgotPwdEc.php?isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa訪問之,即可進入密碼重置頁面:


輸入新密碼 PenTest1024 後系統提示修改成功。用 chenchuan/PenTest1024 成功登入:


防禦措施上,密碼找回的憑證切勿下發客戶端,另外,校驗郵箱是否有效應新增圖片驗證碼,以防止關鍵引數被列舉。


相關文章