本文出自:http://www.freebuf.com/author/yangyangwithgnu
在邏輯漏洞中饿这,任意用戶密碼重置最為常見,可能出現(xiàn)在新用戶注冊(cè)頁(yè)面,也可能是用戶登錄后重置密碼的頁(yè)面,或者用戶忘記密碼時(shí)的密碼找回頁(yè)面涝滴。其中,密碼找回功能是重災(zāi)區(qū)胶台。我把日常滲透過程中遇到的案例作了漏洞成因分析,這次杂抽,關(guān)注因重置憑證泄漏導(dǎo)致的任意用戶密碼重置問題诈唬。
案例一
用郵件找回密碼時(shí),作為重置憑證的驗(yàn)證碼在 HTTP 應(yīng)答中下發(fā)客戶端缩麸,抓包后可輕易獲取铸磅。先用攻擊者賬號(hào)走一次密碼找回流程,測(cè)試賬號(hào) yangyangwithgnu@yeah.net 選用郵箱找回密碼:
點(diǎn)擊獲取校驗(yàn)碼后抓取如下應(yīng)答:
其中杭朱,VFCode 從字面理解很可能是校驗(yàn)碼阅仔。登錄郵箱查看網(wǎng)站發(fā)過來的密碼找回郵件:
發(fā)現(xiàn)兩者一致,那么弧械,幾乎可以確認(rèn)服務(wù)端將密碼找回的校驗(yàn)碼泄漏至客戶端八酒,可導(dǎo)致任意賬號(hào)密碼重置問題。
嘗試找回普通賬號(hào)的密碼刃唐。密碼找回首頁(yè)輸入郵箱后羞迷,系統(tǒng)將立即校驗(yàn)該郵箱是否注冊(cè):
將 UName 參數(shù)定義為枚舉變量,以常見 qq 郵箱作為字典画饥,可枚舉出多個(gè)有效郵箱:
以 chenwei@qq.com 為例衔瓮,在應(yīng)答包中找到校驗(yàn)碼,成功將其密碼重置為 PenTest1024抖甘,驗(yàn)證可登錄:
嘗試找回管理員賬號(hào)的密碼热鞍。從該網(wǎng)站的域名注冊(cè)信息中找到聯(lián)系人的郵箱為 fishliu@xxxx.cn,可推測(cè)后臺(tái)用戶的郵箱后綴為 @xxxx.cn衔彻,所以薇宠,用常見后臺(tái)用戶名簡(jiǎn)單調(diào)整可構(gòu)造出后臺(tái)用戶郵箱字典,枚舉出大量后臺(tái)用戶:
同理可重置這些后臺(tái)用戶的賬號(hào)密碼米奸,為避免影響業(yè)務(wù)昼接,不再實(shí)際操作。
案例二
用郵件找回密碼時(shí)悴晰,帶憑證的重置鏈接泄漏至客戶端慢睡,抓捕可獲取逐工。用攻擊者賬號(hào)走一次密碼找回流程。在找回密碼頁(yè)面輸入攻擊者賬號(hào)及其郵箱(yangyangwithgnu漂辐、yangyangwithgnu@yeah.net)后提交:
攔截如下應(yīng)答:
顯然是個(gè)重定向泪喊,isVerify、PassPhrase 這兩個(gè)參數(shù)很可疑髓涯,后續(xù)交互中應(yīng)留意袒啼,先放包,進(jìn)入發(fā)送重置郵件的頁(yè)面纬纪,輸入驗(yàn)證碼后提交蚓再。登錄攻擊者郵箱查看重置郵件:
這個(gè)帶 token 的重置鏈接似曾相識(shí),對(duì)包各,就是前面抓包獲取的 token 信息摘仅,比對(duì)看下:
forgotPwdEa.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8
forgotPwdEc.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8
唯一區(qū)別 forgotPwdEa 和 forgotPwdEc?兩個(gè)文件名。
接下來驗(yàn)證通過服務(wù)端泄漏的 token 能否重置普通用戶的賬號(hào)密碼问畅。從重置流程可知娃属,要重置密碼必須提供用戶名及其郵箱(或手機(jī)號(hào))。
獲取有效用戶名护姆。注冊(cè)頁(yè)面中矾端,輸入用戶名后立即校驗(yàn)該用戶名是否被占用:
對(duì)應(yīng)請(qǐng)求、應(yīng)答如下:
用戶名已存在返回 failed卵皂,不存在返回 ok秩铆。以此特征,用常見國(guó)人姓名字典灯变,可枚舉出大量有效用戶名(如 chenchuan豺旬、chenanqi、chenanxiu柒凉、zhangfeng 等等)族阅,存為 username.txt。
獲取有效用戶名對(duì)應(yīng)郵箱膝捞。密碼找回首頁(yè)提交的請(qǐng)求中坦刀,user_name 與 email 參數(shù)匹配情況下,HTTP 應(yīng)答代碼為 302蔬咬,交互包如下:
可以此特征枚舉有效用戶名及其郵箱±鹨#現(xiàn)在考慮如何制作郵箱字典?很多用戶喜歡用用戶名注冊(cè) qq 郵箱林艘,換言之盖奈,用戶名 yangyangwithgnu 可能對(duì)應(yīng)郵箱 yangyangwithgnu@qq.com。所以狐援,用前面已經(jīng)獲取有效用戶名字典 username.txt 快速制作了郵箱字典 qq-email.txt钢坦,其中究孕,username.txt 與 qq-email.txt 逐行對(duì)應(yīng)。
例如爹凹,前者第一行為 yangyangwithgnu厨诸、后者第一行為 yangyangwithgnu@qq.com。將上面的數(shù)據(jù)包放入 burp 的 intrduer 中禾酱,攻擊類型選 pitchfork微酬、user_name 的參數(shù)值定義為枚舉變量 1 并加載字典 username.txt、email 的參數(shù)值定義為枚舉變量 2 并加載字典 qq-email.txt颤陶,可枚舉出大量有效用戶名/郵箱信息颗管,如,zhangfeng/zhangfeng@qq.com滓走、chenchuan/chenchuan@qq.com 等等忙上。
用普通賬號(hào) chenchuan/chenchuan@qq.com 演示密碼重置漏洞。輸入用戶名闲坎、密碼提交,正常完成密碼找回邏輯茬斧,從交互包中獲取服務(wù)端下發(fā)的重置 token:
isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa
拼裝為重置鏈接?http://www.xxxx.com/user/forgotPwdEc.php?isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa?腰懂,訪問之,即可進(jìn)入密碼重置頁(yè)面:
輸入新密碼?PenTest1024 后系統(tǒng)提示修改成功项秉。用 chenchuan/PenTest1024 成功登錄:
防御措施上绣溜,密碼找回的憑證切勿下發(fā)客戶端,另外娄蔼,校驗(yàn)郵箱是否有效應(yīng)添加圖片驗(yàn)證碼怖喻,以防止關(guān)鍵參數(shù)被枚舉。