web基础漏洞-验证码爆破

1、介绍

验证码爆破,服务端未限制验证码的有效时间和可试次数,导致攻击者可以持续请求验证,从而获取正确验证码。

2、简单测试

如果假设存在验证码爆破漏洞,直接对所有可能的验证码爆破,直到响应发生变化以获取登录凭证。

这是真实需要获取验证码时所必须的操作,但一般来说渗透测试更多的是偏向于验证漏洞存在,要求尽可能减少请求以降低对目标站点的干扰。即使是真实攻击,那么基于优化操作可以平衡整体的投入和产出,并不能预期的确定其就存在验证码爆破漏洞。

3、优化测试

3.1 确定有效次数

如果有效次数被限制,一般是直接放弃,除非存在其它逻辑问题

测试方法:

  • 对于开发者来说,要么准确设置了验证码次数限制,要么直接未设置限制。
  • 次数限制一般在20以内,那么一般以22为界限,第23次测试时使用真实验证码,如果有效,基本说明开发时为限制
  • 同时测试验证码,在有效次数内和外是否存在变化

3.2 确定有效时间

如果验证码的有效时间是紧迫的,那么要么提高爆破单位时间的测试个数,要么直接放弃。

测试方法:

  • 假定有效时间是n分钟,那么请求服务端发送验证码,n分钟后测试真实验证码是否有效。
  • 一般依次测试5分10秒,15分10秒和30分10秒
  • 同时测试验证码,有效时间内和外是否存在变化。

3.3 确定平均网络延迟

如果验证码的有效时间虽然限制但相对充裕,有效次数未限制,那么网络延迟会成为重要的影响因素,决定是否进行测试以及切换网络、多线程等操作。

3.4 确定是否存在逻辑漏洞

(1)验证码覆盖

如果对同一手机号或邮箱,前面请求的验证码仍然有效,那么相当于一个手机号或邮箱可以匹配多个验证码的任意一个即可,大大降低爆破难度

(2)获取验证码频率

(3)验证码未刷新

某些场景中,攻击者短时间重复获取验证码,服务端前后发送一致的验证码。

如果重复请求时刷新上一验证码的测试次数和时间,那么可以低频爆破,然后间隔刷新。

4、防护

  • 使用较长的验证码,6位优于4位
  • 设置验证码爆破次数和有效时间
  • 限制每天或者每小时可以获取的验证码次数
  • 超出有效时间或有效次数、使用过的验证码进行删除或者标记无效处理
  • 请求获取验证码时,必须重新生成,以及对上一个获取的验证码进行删除或者标记无效处理
posted @ 2023-10-21 19:46  挖洞404  阅读(282)  评论(0编辑  收藏  举报