逻辑类漏洞——任意密码重置测试
1、验证码不失效
原因:找回密码时,获取的验证码缺少时间限制,仅判断验证码是否正确,未判断是否过期,测试方法:可通过遍历(暴力破解)找到真正的验证码,完成验证。
2、验证码直接返回
原因:输入手机号点击获取验证码,验证码在客户端生成,并直接返回在Response中。
测试方法:直接输入目标手机号,点击获取验证码,观察Response数据包中是否有验证码即可。
3、缺少身份判断
原因:重置密码时,未对用户身份进行有效验证。
测试方法:
1、A用户输入自己收到的验证码,输入B用户的手机号,达到重置B用户密码的目的:在找回密码页面输入A用户的手机号,点击获取验证码,A用户收到了服务器发送的验证码;在输入验证码页面输入接收到的验证码,点击下一步,拦截数据包,在数据包中包含手机号字段、验证码字段,其中手机号字段中填充了A用户的手机号,验证码字段中填充了A用户刚刚接收到的验证码,将手机号字段修改为B用户的手机号,转发数据包,进入修改B用户密码的界面。
2、进入重置密码页面,输入新密码,拦截请求包,在请求包中包含用户名字段、新密码字段,篡改用户名字段达到修改其它用户密码的目的
3、进入重置密码页面,输入新密码,拦截请求包,在请求包中包含ID字段、用户名字段、新密码字段,篡改ID字段达到修改其它用户密码的目的
4、cookie值替换
原因:重置密码最后阶段仅判断cookie是否存在,未判断该cookie有没有通过之前重置密码阶段的验证,可替换cookie重置他人密码。
测试方法:利用目标用户进行重置密码操作,获取目标用户Cookie;利用自己用户进行重置密码操作,在最后一步替换成目标用户的cookie,重置目标用户密码。
5、修改接收验证码的手机或邮箱
原因:仅判断了手机号和验证码是否匹配,未验证手机号和用户名是否匹配
测试方法:输入用户名获取验证码,修改接收验证码的手机号为自己手机号码,接收到验证码,进入重置流程。
6、本地验证绕过
原因:客户端在本地进行用户输入信息是否正确的判断,因此可以修改判断结果,欺骗客户端。
测试方法:重置目标用户名,输入错误验证码(或其他验证信息),修改返回包,把错误改为正确,即可进入重置密码页面。
7、跳过验证步骤
原因:修改密码的步骤没有做校验,可以直接输入最终修改密码的页面,进行修改密码操作。
测试方法:例如进入最终修改密码页面需要3步,最终修改密码链接为,http://AA.BB.CC.com?username=FF&email=EE,可绕过前面的步骤,直接访问最后一步,即以上链接进入重置密码页面。
8、替换字段值
原因:用户在执行修改用户信息的SQL语句时,执行了所有参数的修改。
测试方法:修改用户信息时,抓取数据包,修改数据包的参数(如用户名、密码)和对应的值,达到修改目标用户密码的目的。
测试过程:修改用户信息,拦截数据包,替换数据包中的字段,如将用户别名字段替换成隐藏的用户名字段,修改用户密码字段,达到修改用户名、密码的目的