盘点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. 前端校验+无效校验
案例类型:
- 前端校验可直接爆破绕过
- 更改密码时未验证短信验证码
- 验证与操作分离导致任意用户注册
攻击手法:
- 抓包绕过前端校验
- 测试无效校验直接绕过
修复方案:
- 禁止前端校验或无效校验
- 验证码与用户名密码需同时提交服务器验证
4. 验证码可控
案例类型:
- 数据包中含明文验证码
- 验证码弱加密出现在响应包
- 验证码直接出现在源码中
- 验证码基于时间戳等参数生成
攻击手法:截取登录数据包查找验证码泄露
修复方案:
- 禁止明文或弱加密方式存储验证码
- 验证码不应出现在响应包或源码中
5. 验证码存在规律
特征:如5次后重复、等差数列等可预测模式
攻击手法:请求多次观察验证码生成规律
修复方案:必须采用随机生成方式
6. 验证码爆破
特征:
- 验证码错误时不销毁
- 短信验证码未限制时间和次数
- 4-6位数字组成
攻击手法:
- 使用Cluster bomb模式爆破
- 范围000000-999999遍历
修复方案:无论正确与否都应及时销毁验证码
7. 验证码复用
特征:验证码可反复使用
攻击手法:
- 观察验证码是否变化
- 在注册/忘记密码界面构成用户枚举
修复方案:及时销毁已使用验证码
8. 状态码绕过
案例:修改响应码(如500→200)绕过限制
攻击手法:抓包修改响应码或查看JS源码
修复方案:修改验证逻辑,不依赖返回参数
9. 万能验证码
案例:如0000、8888等固定验证码
攻击手法:尝试常见固定数字组合
修复方案:禁止万能验证码
10. 未授权手机号绕过
案例类型:
- 修改响应码绕过
- 验证码与手机号未绑定
- 验证码在一定时间内有效
攻击手法:
- 自己手机收验证码用于他人账号
- 修改响应码绕过
修复方案:
- 修改验证逻辑
- 手机号与验证码服务器端绑定
- 限制验证码发送周期和时效
11. 加密报文绕过
特征:验证码字段加密但功能缺陷允许明文通过
攻击手法:尝试解密或直接使用明文
修复方案:检查验证码功能完整性
12. 邮件/短信轰炸
类型:
- 直接重放数据包
- 遍历参数构成轰炸
- 横向轰炸(不同手机号)
攻击手法:
- 直接重放或延时发包
- 遍历其他参数构造不同请求
- 修改手机号格式(加空格/大小写)
修复方案:
- 限制请求频率
- 错误多次后临时锁定账号(非永久)
13. 短信内容自定义
风险:可构造钓鱼内容,尤其对金融等行业危害大
修复方案:限制邮件/短信内容自定义
14. session参数重复校验
特征:滑动验证码设计缺陷,可通过遍历数值绕过
攻击手法:抓取数据包确定数值范围进行遍历
修复方案:及时销毁验证码
总结
验证码安全漏洞主要源于设计缺陷和逻辑错误,开发人员应:
- 确保验证码随机生成且及时销毁
- 实现服务器端严格校验
- 避免敏感信息泄露
- 限制请求频率和次数
- 保持业务流程一致性
渗透测试人员应重点关注验证码的逻辑漏洞,这些漏洞往往比技术漏洞更难避免,也更容易被忽视。
相似文章
相似文章