暴力破解-on server

不安全的验证码-on server常见问题

  • 验证码在后台不过期,导致可以长期使用
  • 验证码校验不严格,逻辑出现问题
  • 验证码设计的太过简单和有规律,容易被猜解
    (12306验证码yyds)

环境:老三样

演示:

进入环境,随意输入用户名和密码,正确输入验证码

图片

提示用户名或者密码不存在,抓包查看

图片

这里首先尝试不提交验证码的情况

图片

提示不能为空,接着尝试随意输入验证码(不按照环境提供的)

图片

提示验证码错误,可以发现这里后端对验证码进行了验证,接着验证验证码是否存在过期问题

按照环境所给验证码输入

图片

提示用户名或密码不存在,这次更改一下随意填的用户名和密码

图片

仍然是提示不存在,说明验证码是有效重复利用的(至少是在一段时间内有效)

接下来就可以按照之前暴力破解的套路,对用户名和密码进行爆破

PS:环境已提示正确的用户名和密码图片

建议把这几个加入字典,跑一跑效果即可,不用全跑浪费时间

源码分析:

在前端能发现生成验证码的文件图片

每次点击就可以刷新一个验证码,或者刷新页面也可

图片

这里文件源码对用户名多个元素进行判断是否为空,如果都不为空会首先去鉴别前端输入的验证码是否与后端session的一致,一致才会去验证用户名和密码,那么问题出在哪里?

查看文件可知问题在session这里,在PHP中如果不对session进行相应的销毁配置,默认的存在时间是1440s,也就是24分钟之内都是可以用的,这里并没有对销毁进行配置,所以我们才可以进行重复利用

正确来说

图片

验证码在这里验证结束后就应该进行销毁,而不是随着默认时间销毁

over.