任意用户密码重置

10种绕过姿势

Posted by Waldo on May 5, 2018

验证码不失效

造成原因:找回密码的时候获取的验证码缺少时间限制,只判断了是否正确,未判断验证码是否过期,也就是说验证码的时效性很长(在很长一段时间里不会改变)

测试方法:通过枚举找到真正的验证码输入验证码完成验证 image.png

案例:以下案例在点击获取手机验证码后,Response包里直接抓取到了手机验证码。 image.png 这种验证码不失效而且验证码是4位数的情况下, 直接爆破 看包的返回长度或者内容来找到正确的验证码。这里返回包是0,代表正确 QQ截图20180507210646.jpg


总结 这种验证码不失效的情况现在已经是非常少见的了,而且验证码的位数也很少有简单的4位验证码了。现在绝大多数是这样的:6位数的验证码而且15分钟内有效,这样子的话爆破的可能性就非常的低了。



验证码直接返回

QQ截图20180507210850.jpg

在Response(返回包)里直接拿到验证码 image.png



验证码未绑定用户

image.png

案例: image.png image.png

另一个案例: 此案例的用户名是加密的。 其实大部分这种情况我们都不需要知道加密算法,比如这里例子,得到liuyy的加密后的值是80e688602c4b11e66320c421e3b71ef2,那么我们就可以直接利用这个keyCode参数了。 image.png

步骤是一样的,输入我们的用户名和收到的验证码,然后把我们的keycode替换为liuyy的那个keycode,这样就可以重置liuyy的密码了。(漏洞原因还是是判断了验证码是否正确,而没有判断该验证码是否跟该用户匹配。)


总结 这种情况没有遇到过,学习了,以后在找回密码的时候会这么测试的。现在看来对于白帽子来说有 2 个手机号是多么的方便了。 案例二中如何获取到其他用户的keyCode呢?这里的话正常走一遍找回密码的流程,然后抓包就会在数据包中找到加密后的keyCode了,这样就可以重置任意用户的密码了。



修改接收的手机或邮箱

image.png

案例: image.png 点击找回密码,首先我们输入zhangwei(我们不知道zhangwei的手机号码),然后点击获取验证码,这个时候把手机号改为我们自己的号码,输入我们自己的号码和验证码,成功跳到重置密码的页面,密码重置成功。



本地验证的绕过

image.png

案例: image.png QQ截图20180507205843.jpg

这里我们所做的就是把0修改为1,可以借工具修改返回包,我们把0改为1,Forward防包,然后查看页面,成功跳转到修改密码的页面,输入新密码即可修改用户13888888888的密码


总结 who_jeff曾经分享给过这样一个类似的案例,他是在一个安卓app上进行抓包测试的,当时就直接修改返回包 来欺骗本地的app客户端的,成功重置任意用户的密码。



跳过验证步骤

跳过验证步骤.jpg

案例:

案例.jpg 案例图2.jpg


总结 这个漏洞不用按照正常的流程来走,这里的话直接补齐设置新密码的链接,然后利用这里链接可以直接重置任意用户的密码。



未校验用户字段的值

未校验用户字段的值.jpg

案例: 案例.jpg 案例图2.jpg


总结 这里的话关键是在最后一步重置密码的时候替换目标手机号,这种其实也是比较暴力的,拿到这个链接的话 可以无条件批量重置任意用户的密码,这里面利用burp可以批量枚举手机号码的mphone参数。



修改密码处id可替换

修改密码处id可替换.jpg

案例: 案例.jpg 案例图2.jpg


总结 这种也比较暴力流氓,可以通过枚举id的值 ,来大批量重置任意用户密码的漏洞,因为不需要用户名了,只需要知道id值即可,危害比较大。



cookie值的替换

cookie的替换.jpg

案例: 案例.jpg 案例图2.jpg 案例图3.jpg


总结 关键点:cookie可指定用户获取, 尝试用他人账号来找回密码的时候,抓取数据包,可以从中提取出cookie值,然后就可以利用这个cookie值,就可以重置指定用户的密码了。



修改信息时替换字段值

修改信息时替换字段值.jpg

案例: 案例.jpg 案例图2.jpg 案例图3.jpg 案例图4.jpg


总结 最后一种要稍微复杂一点,得去找到隐藏参数:loginId 然后再修改数据包,以后挖洞的时候,多留意这些。