仅供学习交流
首先要注册两个账号,为什么要注册两个账号呢?
因为一个账号是用来走正常找回密码流程(Fuzz),另外一个账号是用来作测试的!(我通常都是这样做,如果有不正确的地方还请大家指点,不要因为我让大家误入歧途) 漏洞产生的原因:开发人员将服务器返回的值作为更改密码的校验,没有做二次验证,所以我们可以通过抓包改包工具(burpsuite)来修改服务器返回的值(因为他是在前端验证的,所以我们还可以通过修改前端代码来绕过) 重置姿势:修改前端代码绕过 改包 Fuzz思路:0x01 正常找回 0x02 利用缺陷修改密码 0x01 正常找回我们先正常的走下找回密码的流程(我有一个习惯就是,喜欢用network)先获取验证码 当我们输入正确的验证码之后,它成功给我们跳转到了第二步!
成功修改密码!
0x02 利用缺陷修改密码在0x01 正常流程中,我们是先获取验证码,然后再验证,如果正确,那么就跳转到第二步,如果不正确,就断在了第一步!在这里的话,我们跳过获取验证码,直接下一步! 因为我们要绕过这个验证啊。。获取不获取都无所谓了!
先输入一个错误的验证码,和正常流程中做比较
如下图
既然这样,我们用burpsuite改下response包,看下他是否跳转到步骤二!
然后放包,看下是否跳转
成功跳转到步骤二!并且成功修改了密码
我们再来看看它前端的代码
跟一下nextDo2() 关键在跳转第二步,如果status 等于0 那么跳转第二步,如果不等于0 那么就提示验证码不正确!
只要 status 等于0 它就跳转第二步(经过黑盒测试,发现他并没有二次验证),那么我们可以这样改if(data.status != 0 )当status不为0的时候跳转步骤二
放包之后,我们验证码随便输!就当作是你给妹子带了个眼罩,谁上都一样!
验证失败又怎样?
|