任意用户密码重置漏洞挖掘之路(一)

 

仅供学习交流首先要注册两个账号,为什么要注册两个账号呢?因为一个账号是用来走正常找回密码流程(Fuzz),另...



仅供学习交流

首先要注册两个账号,为什么要注册两个账号呢?
因为一个账号是用来走正常找回密码流程(Fuzz),另外一个账号是用来作测试的!(我通常都是这样做,如果有不正确的地方还请大家指点,不要因为我让大家误入歧途

漏洞产生的原因:#开发人员将服务器返回的值作为更改密码的校验,没有做二次验证,所以我们可以通过抓包改包工具(burpsuite)来修改服务器返回的值(因为他是在前端验证的,所以我们还可以通过修改前端代码来绕过)

重置姿势:#

修改前端代码绕过

改包

Fuzz思路:#0x01 正常找回

0x02 利用缺陷修改密码

0x01 正常找回#我们先正常的走下找回密码的流程(我有一个习惯就是,喜欢用network)先获取验证码

通过查看,验证码并没有像http://www.xxxx.com/mobile?=132***&?code=123456一样,将验证码显示在URL里,也没有返回值中。那么我们继续往下测


当我们输入正确的验证码之后,它成功给我们跳转到了第二步!


成功修改密码!


0x02 利用缺陷修改密码#在0x01 正常流程中,我们是先获取验证码,然后再验证,如果正确,那么就跳转到第二步,如果不正确,就断在了第一步!在这里的话,我们跳过获取验证码,直接下一步! 因为我们要绕过这个验证啊。。获取不获取都无所谓了!
先输入一个错误的验证码,和正常流程中做比较
如下图




既然这样,我们用burpsuite改下response包,看下他是否跳转到步骤二!



然后放包,看下是否跳转


成功跳转到步骤二!并且成功修改了密码

我们再来看看它前端的代码


跟一下nextDo2()



关键在跳转第二步,如果status 等于0 那么跳转第二步,如果不等于0 那么就提示验证码不正确!


只要 status 等于0 它就跳转第二步(经过黑盒测试,发现他并没有二次验证),那么我们可以这样改if(data.status != 0 )当status不为0的时候跳转步骤二





放包之后,我们验证码随便输!就当作是你给妹子带了个眼罩,谁上都一样!


验证失败又怎样?


原文链接:https://www.secquan.org/Discuss/109


    关注 LoveSec


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册