盘点14类常规验证码安全漏洞及修复方式
字数 1885
更新时间 2025-08-13 09:04:15

验证码安全漏洞全面解析与修复指南

验证码概述

验证码是一种全自动工具,用于区分用户是人类还是计算机程序,同时也能证明目标身份。其主要用途包括:

  • 防止账户暴力破解、刷票等行为
  • 防范爬虫(访问频率超限后要求验证码)
  • 避免垃圾邮件和短信轰炸
  • 防御DDoS攻击
  • 敏感操作的二次确认

验证码类型分类

1. 文本验证码与题库验证码

特征:

  • 纯文本验证码通常可在HTML源码中找到
  • 固定格式问句(如"今天星期几"或数字运算)
  • 题库验证码题量较大但有限

攻击方式:

  • 多刷新建立题库和对应答案
  • 使用正则表达式爬取问题并匹配答案

现状:这类验证码已基本绝迹

2. 语音验证码

采用率低,主要因成本过高

3. 新一代验证码

包括Google reCaptcha、点选验证码、滑动验证码等

攻击方式:

  • 使用Python Selenium模拟用户行为
  • 部分滑动验证码可通过"session参数重复校验"漏洞绕过

4. 图形验证码与短信/邮箱验证码

最常见的验证码类型,也是安全问题的重灾区

14类常规验证码安全问题及修复方案

1. 简单的图文识别

案例:

  • 纯色背景无干扰点/线条
  • 字体简单无变形

攻击手法:

  • 使用PKAV HTTP Fuzzer等工具识别
  • 利用Burp插件识别(部分需收费)

修复方案:

  • 增加扭曲、变形、干扰线条和背景色
  • 使用变换字体等方式增加识别难度

2. 验证码空值绕过

案例:清空验证码字段后服务端不验证

攻击手法:删除验证码字段观察服务端反应

修复方案:

  • 对验证码字段进行强校验
  • 字段缺失时应及时报错

3. 前端校验+无效校验

案例类型:

  1. 前端校验可直接爆破绕过
  2. 更改密码时未验证短信验证码
  3. 验证与操作分离导致任意用户注册

攻击手法:

  • 抓包绕过前端校验
  • 测试无效校验直接绕过

修复方案:

  • 禁止前端校验或无效校验
  • 验证码与用户名密码需同时提交服务器验证

4. 验证码可控

案例类型:

  1. 数据包中含明文验证码
  2. 验证码弱加密出现在响应包
  3. 验证码直接出现在源码中
  4. 验证码基于时间戳等参数生成

攻击手法:截取登录数据包查找验证码泄露

修复方案:

  • 禁止明文或弱加密方式存储验证码
  • 验证码不应出现在响应包或源码中

5. 验证码存在规律

特征:如5次后重复、等差数列等可预测模式

攻击手法:请求多次观察验证码生成规律

修复方案:必须采用随机生成方式

6. 验证码爆破

特征:

  • 验证码错误时不销毁
  • 短信验证码未限制时间和次数
  • 4-6位数字组成

攻击手法:

  • 使用Cluster bomb模式爆破
  • 范围000000-999999遍历

修复方案:无论正确与否都应及时销毁验证码

7. 验证码复用

特征:验证码可反复使用

攻击手法:

  • 观察验证码是否变化
  • 在注册/忘记密码界面构成用户枚举

修复方案:及时销毁已使用验证码

8. 状态码绕过

案例:修改响应码(如500→200)绕过限制

攻击手法:抓包修改响应码或查看JS源码

修复方案:修改验证逻辑,不依赖返回参数

9. 万能验证码

案例:如0000、8888等固定验证码

攻击手法:尝试常见固定数字组合

修复方案:禁止万能验证码

10. 未授权手机号绕过

案例类型:

  1. 修改响应码绕过
  2. 验证码与手机号未绑定
  3. 验证码在一定时间内有效

攻击手法:

  • 自己手机收验证码用于他人账号
  • 修改响应码绕过

修复方案:

  • 修改验证逻辑
  • 手机号与验证码服务器端绑定
  • 限制验证码发送周期和时效

11. 加密报文绕过

特征:验证码字段加密但功能缺陷允许明文通过

攻击手法:尝试解密或直接使用明文

修复方案:检查验证码功能完整性

12. 邮件/短信轰炸

类型:

  1. 直接重放数据包
  2. 遍历参数构成轰炸
  3. 横向轰炸(不同手机号)

攻击手法:

  • 直接重放或延时发包
  • 遍历其他参数构造不同请求
  • 修改手机号格式(加空格/大小写)

修复方案:

  • 限制请求频率
  • 错误多次后临时锁定账号(非永久)

13. 短信内容自定义

风险:可构造钓鱼内容,尤其对金融等行业危害大

修复方案:限制邮件/短信内容自定义

14. session参数重复校验

特征:滑动验证码设计缺陷,可通过遍历数值绕过

攻击手法:抓取数据包确定数值范围进行遍历

修复方案:及时销毁验证码

总结

验证码安全漏洞主要源于设计缺陷和逻辑错误,开发人员应:

  1. 确保验证码随机生成且及时销毁
  2. 实现服务器端严格校验
  3. 避免敏感信息泄露
  4. 限制请求频率和次数
  5. 保持业务流程一致性

渗透测试人员应重点关注验证码的逻辑漏洞,这些漏洞往往比技术漏洞更难避免,也更容易被忽视。

相似文章
相似文章
小程序二维码
 全屏