缺陷位置:密码重置链接中,参数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 理财的网站,应该比较大方,给发个礼物不是啥问题吧。这样漏洞就会越来越少的,嘿嘿~~