缺陷位置:密碼重設連結中,參數newValidCode設定過於簡單(6位純數字),且發送請求時,無次數限制,可以通過爆破重設任意使用者密碼。
測試過程
1 老規矩,點擊忘記密碼。
2 可以看到,讓填郵箱地址,這個也就是可以用來登入用的郵箱。
那就果斷填上小號的郵箱唄。
3 填好郵箱後,點擊下一步,郵箱中會收到如下圖所示的,一個重設密碼的連結。(看不見圖上的字就點擊看大圖吧)
4 用小號多次測試後,可以得到圖3中的分析,主要就是那個newValidCode的字串在驗證。
訪問連結,可以看到可以直接修改密碼了。
5 所以問題變的很簡單了,只要爆破newValidCode就可以了。
6 開啟burps,隨便輸入新密碼,抓包。這裡注意地址欄的地址將newValidCode寫成任意的6位元字,因為我們重設密碼的時候是不清楚這個資料是多少的。
mailAuthenId這個可以自己用自己的帳號重設自己密碼去查看,然後重設別人的時候,將之前自己得到的數字加1就可以了。
(ps:無論newValidCode參數是什麼,訪問那個連結都會正常顯示修改密碼的頁面,不過newValidCode不正確的話,不會修改密碼成功而已)
控制變數,只留下圖中所示的待爆破的變數即可。
7 然後爆破請求,可以看到這裡出現了明顯的變動,說明這裡就是正確的密碼。
8 用變動位置的資料去測試修改密碼的地址會出現如下圖。
這個圖就說明密碼已經修改成功了,修改密碼的連結失效了而已。
去用爆破出的密碼去測試登入,成功登入。
圖7
由於newValidCode參數的驗證字元只有6位純數字,所以多線程去爆破,很快就可以重設密碼了。。。
修補:
1 newValidCode設定的複雜點,最好是26個字母(區分大小寫)和10個數位組合。
2 提交修改密碼的要求節流下,可以在提交請求的時候加上驗證碼,或者限制每天重設錯誤10次當天就不得在重設密碼。
3 理財的網站,應該比較大方,給發個禮物不是啥問題吧。這樣漏洞就會越來越少的,嘿嘿~~