逻辑漏洞之任意密码重置

本文总结自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用户密码改为跟自己密码一样的密码

 

猜你喜欢

转载自www.cnblogs.com/wintrysec/p/10875066.html