當前位置:
首頁 > 新聞 > 任意用戶密碼重置(一):重置憑證泄漏

任意用戶密碼重置(一):重置憑證泄漏

*

本文作者:yangyangwithgnu,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。


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


案例一


用郵件找回密碼時,作為重置憑證的驗證碼在 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 成功登錄:



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


*本文作者:yangyangwithgnu,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

TAG:FreeBuf |