目录
方法
有的验证码输入正确一次,在一定时间内不用再输入。
有的验证码输入正确一次,会在你session中设定一个值,告诉服务器你已经通过验证码验证了。
有的验证码因为逻辑问题只是一个摆设,正常的逻辑为先对比验证码是否正确,再检测账号密码是否正确,反过来了
修复建议:
提高验证码的长度、复杂度
可限制错误登录次数、有效时间
案例
中国人寿某省公司逻辑漏洞可导致所有员工姓名、手机等敏感信息
说明:通过爆破获取他的姓名信息,输入手机号和验证码以后,点击获取验证码。验证码直接返回了
还有一种验证码发送了之后会在15分钟或者30分钟有效,这时候可以爆破验证码,对于4位纯数字验证码:从0000~9999的10000种可能用多线程在5分钟内跑完并不是很难。对于6位纯数字验证码:六位数的验证码1000000位,单从爆破时间上来看就比4位数的多100倍,这时候爆破难度会大一点,但是可以通过多次获取验证码观看验证码规律,因为有些验证码是首位大于5,如511155、601256等等,这时候,对字典进行处理后也可以爆破出验证码。
概念:重复提交携带验证码的数据包,查看返回包,判断次数
测试方法:
填写正确登录信息和验证码 –> 抓取提交数据包 –> 重复提交该数据包 –> 查看是否登录成功 –> 登录成功则存在验证码重复使用问题
案例:
Step1.输入正确信息点击登录时抓包;
Step2.抓包,通过修改imageField参数的大小来实现暴力提交,自设一个两位数数字字典作为payload;
Step3.查看任意响应包是否登录成功,从结果来看,暴力重复提交的数据包均登录成功。
概念:验证码直接由客户端生成,在回显中显示,可通过浏览器工具直接查看
测试方法:
在源码中显示。源代码审计,搜索源码中有无验证码
在COOKIE中显示。抓包时分析COOKIE中是否含有验证码
案例:
Step1.输入相关信息
Step2.抓包,得到验证码
Step3.输入验证码。验证通过
漏洞成因:
由于逻辑设计缺陷,可绕过验证,比如直接删除COOKIE或验证码参数可绕过、当验证不通过清空session时,验证码参数值为空时绕过等。
测试方法:
抓包,删除验证码字段,查看是否可以成功发送
抓包,正常流程下,记录验证码后的数据包,替换目标包中内容,直接发送,查看是否可以直接绕过验证码
案例:
Step1.输入正确账户信息和错误验证码,登录时抓包
Step2.删除COOKIE
Step3.客户端登陆成功