总结了一下SRC中常见的验证码绕过思路
1. 验证码使用后不会销毁
验证码可重复使用,导致可爆破账户
2. 生成验证码字符集可控
验证码可控,可自行选择验证码(案例:ThinkCMF 1.X-2.X)
3. 验证码存放在暴露位置
比如验证码藏到cookie里面,或者藏到编码后的某些值里面,藏到图片的字节里面等(有时也会进行加密编码藏起来)
4. 验证码为空,或8888,0000等可绕过
验证码为空,是因为程序逻辑错误,验证码验证一次之后本该退出此次验证码,生成新的,由于没有生成新的继续验证密码是否正确
8888,0000等为开发程序时设置的万能密码,方便测试,有时候会忘记删除
1111 2222 3333 4444 5555 6666 7777 8888 9999
5.其他对比后验证码未销毁
仅仅校验了密码字段和验证码,用户名并未校验,那么这里就可以输入一个弱密码(如123456,111111,123123等等),然后反向去遍历用户,获取正确的口令。
6.验证码尺寸可控
该问题被人们广为关注源于PHPcms早期版本的后台登录验证码尺寸可控,可用于DDoS。
7.验证码过于简单,可轻易机器识别
如良精南方都可识别
8. 待补充...
修复方法:
验证码设置为6位并设置超时(一分钟)失效。
建议修改应用程序源代码,在登录模块中增加对验证码正确性的验证,并且要保证在验证用户名、密码或其他信息之前首先验证验证码的正确性。
喜欢就关注下叭~