基于Burpsuite的安全测试十二:验证码机制测试

基于Burpsuite的安全测试十二:验证码机制测试

常见的验证码有图形验证码、短信验证码、邮箱验证码、滑动验证码、语音验证码

情景1:验证码暴力破解测试

  1. 短信验证码一般为4-6位数字组成,如果没有失效时间和尝试失败次数的限制,就可以在这个区间尝试暴力破解。
  2. 注册的时候,输入手机号点击获取验证码此时用Brup Suite抓取数据包,点击注册后通过抓取的包中对验证码参数进行暴力破解,破解范围为000000-999999、00000-99999、0000-9999。
  3. 通过返回值的长度判断哪个是正确的验证码,输入验证码输入框中成功注册。

系统修复方案:

设置验证码失效时间,如120s。

限制试错次数,如果10分钟内连续失败5次则锁定账号一天。

情景2:验证码重复使用测试

  1. 如用户在页面输入内容,并输入验证码,提交信息,通过抓到的包,修改提交内容后重复提交信息,可以提交成功。这种情况就行因为验证码在一次认证成功后,没有将认证成功的session清空,所以导致可以重复使用该验证码。

系统修复方案:

为了防止验证码一次认证反复使用的问题,可以在一次认证成功后服务器端清空认证成功的session。

情景3:验证码客户端回显测试

  1. 如果验证码在客户端生成而不是在服务端生成,就容易发生验证码泄漏问题。如重置密码功能,在前端页面输入他人手机号后获取验证码,通过抓包发现验证码在本地生成,输入本地生成的验证码后就可以继续操作,重置密码成功。

系统修复方案:

  1. 应采用服务器端生成验证码机制,避免在本地客户端生成。
  2. 设置验证码的时效性,如120s。
  3. 验证码应随机生成,使用一次就失效。

情景4:验证码绕过测试

  1. 可以通过修改前端提交到服务器返回的数据,来绕过验证码。如输入任意手机号和任意的验证码注册,通过Burp Suite对数据包进行截取,右击选择Do intercept-Response to request。然后单击Forward后,Burp显示的就是网站返回的数据包。因为验证码为随意输入的,所以相关返回字段有标识表明验证码正确还是错误,如返回res_code为1标识验证码错误,则可将其值改为0,尝试是否可以绕过验证码,改为0后继续Forward后,查看可以注册成功。

系统修复方案:

应该在服务器端增加验证码认证机制,对客户端提交的验证码进行二次校验。

情景5:验证码自动识别测试

  1. 验证码识别流程为 图像二值化处理---去干扰---字符分割---字符识别。
  2. 以登录为例子,首先通过多次刷新验证码,查看验证码组成规律。
  3. 其次,利用第三方工具对验证码进行图像二值化处理---去干扰,然后通过人工对比结果查看准确性。
  4. 对页面进行登录,并抓包,将抓取到的请求包放到PKAV HTTP Fuzzer工具的请求包内,设置验证码、用户名、密码的标志位。
  5. 启动开始对账号密码进行暴力破解,验证码会自动载入。根据请求结果可以看到正确的用户名和密码登录成功了。

系统修复方案:

  1. 为了防止验证码被识别,需要增加验证码复杂度
    1. 增加背景元素的干扰,如背景色、背景字母等。
    2. 字符的字体进行扭曲、粘连。
    3. 使用公式、逻辑验证等,人四则运算、问答题等。
    4. 图形验证码和使用者相关,比如选择最近联系人、最近购买的商品等。

猜你喜欢

转载自blog.csdn.net/chang_jinling/article/details/92433053