暴力破解-on server
不安全的验证码-on server常见问题
- 验证码在后台不过期,导致可以长期使用
- 验证码校验不严格,逻辑出现问题
- 验证码设计的太过简单和有规律,容易被猜解
(12306验证码yyds)
环境:老三样
演示:
进入环境,随意输入用户名和密码,正确输入验证码
提示用户名或者密码不存在,抓包查看
这里首先尝试不提交验证码的情况
提示不能为空,接着尝试随意输入验证码(不按照环境提供的)
提示验证码错误,可以发现这里后端对验证码进行了验证,接着验证验证码是否存在过期问题
按照环境所给验证码输入
提示用户名或密码不存在,这次更改一下随意填的用户名和密码
仍然是提示不存在,说明验证码是有效重复利用的(至少是在一段时间内有效)
接下来就可以按照之前暴力破解的套路,对用户名和密码进行爆破
PS:环境已提示正确的用户名和密码
建议把这几个加入字典,跑一跑效果即可,不用全跑浪费时间
源码分析:
在前端能发现生成验证码的文件
每次点击就可以刷新一个验证码,或者刷新页面也可
这里文件源码对用户名多个元素进行判断是否为空,如果都不为空会首先去鉴别前端输入的验证码是否与后端session的一致,一致才会去验证用户名和密码,那么问题出在哪里?
查看文件可知问题在session这里,在PHP中如果不对session进行相应的销毁配置,默认的存在时间是1440s,也就是24分钟之内都是可以用的,这里并没有对销毁进行配置,所以我们才可以进行重复利用
正确来说
验证码在这里验证结束后就应该进行销毁,而不是随着默认时间销毁
over.