逻辑漏洞-任意密码重置

本文总结自i春秋课程,仅为方便记忆查询

源视屏链接

1.验证码不失效

原因:
找回密码时,获取的验证码缺少时间限制
仅判断了验证码是否正确,未判断验证码是否过期

测试方法:
通过Burp枚举找到真正的验证码

2.验证码直接返回

原因:
输入手机号后点击获取验证码,验证码在客户端生成
并直接返回Response以方便对接下来的验证码进行比对

测试方法:
直接输入目标手机号,点击获取验证码,观察返回包

3.验证码未绑定用户

原因:
未对验证码和手机号匹配进行验证

测试方法:
在提交手机号和验证码时,拦截改包,用别的手机验证
或者拦截修改keycode

4.修改接受的手机和邮箱

原因:
用户名、手机号、验证码三者没有统一验证
仅判断了三者中的手机号和验证码匹配正确
如果正确则判断成功进入下一流程

测试方法:
输入用户名获取验证码
修改接收验证码的手机为自己的手机号

5.本地验证绕过

原因:
客户端本地验证验证码是否正确
而判断结果也可以在本地修改

测试方法:
重置目标用户,输入错误验证码
修改返回包,把错误改为正确

6.跳过验证步骤

原因:
(多页面跳转修改密码)
对修改密码的步骤没有做校验
导致可以直接输入最终修改密码的网址

测试方法:
首先使用自己的账号走一次流程,获取每个步骤的页面链接
重置他人账户时,直接输入最终修改密码的链接重置密码

7.未校验用户字段值

原因:
在整个重置密码流程中,只对验证码和手机号做了校验
未对后边设置新密码的用户身份做判断
导致在最后修改用户身份重置他人密码

测试方法:
使用自己的手机号走流程
最后一步,修改数据包中用户身份

8.修改密码处ID可替换

原因:
修改密码时,没有对旧密码进行判断
且根据ID的值修改用户密码
修改数据包里ID的值,即可修改他人密码

测试方法:
修改自己的密码,抓取数据包
替换ID值,修改他人密码
通过遍历ID能修改所有用户密码!

9.cookie值的替换

原因:
重置密码走到最后一步时,仅判断唯一用户标识cookie是否存在
并未判断cookie有没有通过之前重置密码过程的验证
导致可替换cookie重置他人用户,(cookie可指定用户获取)

测试方法:
重置自己密码,重置成功最后阶段,抓取数据包
在第一阶段,重新获取目标cookie,替换cookie到抓到的数据包重放

10.修改密码时替换字段值

原因:
在执行修改个人信息的sql语句时,用户密码也当做字段执行了
而且是根据隐藏参数loginid来执行的
导致修改loginid,就可以修改他人密码

测试方法:
修改个人资料时,抓取数据包,然后修改数据包参数
替换隐藏参数修改他人密码
把对应loginid用户密码改为跟自己密码一样的密码