关于验证码的那些漏洞
字数 1694 2025-08-12 11:34:39
验证码安全漏洞全面解析与防御指南
一、短信轰炸漏洞
漏洞原理
短信轰炸漏洞是由于系统未对短信验证码的发送频率、用户及其IP进行合理限制导致的攻击方式。
攻击手法
-
基础短信轰炸
- 使用Burp Suite等工具持续发送验证码请求
- 无任何限制时可直接重复发送
-
并发绕过限制
- 当系统做了单次请求限制时,可使用并发技术绕过
- 使用Turbo Intruder等插件进行并发请求
- 并发次数越大,轰炸效果越显著
-
Cookie删除绕过
- 尝试删除Cookie,部分系统仅依赖Cookie判断验证码是否已获取
- 删除后系统可能认为这是新请求而允许再次发送
-
特殊格式绕过
- 手机号码变形方式:
- 前后加空格:
13888888888、13888888888 - 添加国家代码:
8613888888888、08613888888888、008613888888888、+8613888888888 - 添加前缀:
013888888888、0013888888888 - 特殊符号:
/r、/n等
- 前后加空格:
- 修改Cookie或变量值为12位号码(如
138888888889),部分短信网关会截取前11位 - 使用特殊编码格式(如URL编码、Unicode编码等)
- 手机号码变形方式:
防御措施
- 实施严格的发送频率限制(如1条/分钟,5条/小时)
- IP和用户维度双重限制
- 手机号格式严格校验(去除空格、统一格式)
- 验证码发送前增加图形验证码
- 相同内容短时间内不重复发送
二、验证码暴力破解漏洞
漏洞原理
服务端未对验证码的有效时间和尝试次数作出限制,导致攻击者可枚举所有可能组合。
攻击手法
-
直接暴力破解
- 4位数字验证码:0000-9999共10000种可能
- 多线程可在5分钟内完成爆破
- 6位数字验证码:000000-999999共1000000种可能
- 爆破时间约为4位验证码的100倍
- 4位数字验证码:0000-9999共10000种可能
-
绕过防护措施
- 修改请求参数绕过前端限制
- 使用IP轮换规避IP封锁
- 结合其他漏洞(如验证码回显)提高效率
防御措施
- 设置合理的验证码有效期(通常2-5分钟)
- 限制单个验证码尝试次数(如5次错误后失效)
- 增加错误尝试锁定机制
- 使用复杂验证码(字母数字混合、干扰元素)
- 重要操作使用多因素认证
三、验证码回显漏洞
漏洞原理
验证码直接显示在HTTP响应包中,攻击者无需破解即可直接获取。
攻击手法
- 分析HTTP请求响应,查找验证码字段
- 可能出现在:响应体、Header、Cookie等位置
防御措施
- 验证码仅在服务端校验,不返回客户端
- 敏感信息脱敏处理
- 使用HTTPS防止中间人截获
四、验证码绕过漏洞
漏洞原理
系统未正确验证用户与手机号的绑定关系,导致可修改接收验证码的手机号。
攻击手法
-
修改绑定手机号
- 正常流程:向绑定手机发送验证码
- 攻击方法:拦截请求,修改手机号为攻击者控制的号码
-
参数篡改
- 修改请求中的手机号参数
- 修改用户ID等关联参数
防御措施
- 严格校验用户与手机号的绑定关系
- 重要操作增加二次确认
- 使用签名机制防止参数篡改
- 关键参数服务端校验
五、验证码转发漏洞
漏洞原理
系统处理多个手机号时存在缺陷,导致验证码可同时发送给非预期号码。
攻击手法
- 添加额外手机号参数:
- 使用逗号分隔:
13888888888,13999999999 - 系统可能解析为数组同时发送
- 使用逗号分隔:
- 修改参数为数组格式
防御措施
- 严格校验手机号参数格式
- 限制单次请求只能发送到一个号码
- 验证手机号归属与用户关系
- 重要操作增加确认流程
综合防御建议
-
输入验证
- 严格校验手机号格式(正则表达式)
- 去除前后空格等特殊字符
- 统一转换为标准格式
-
频率控制
- IP维度限制:如每个IP每小时最多发送10次
- 用户维度限制:如每个手机号每天最多发送5次
- 全局阈值报警
-
安全设计
- 验证码生命周期管理(时效性、单次性)
- 不返回客户端,仅服务端校验
- 重要操作结合多种验证方式
-
监控审计
- 异常发送行为监控
- 日志完整记录
- 实时报警机制
-
业务安全
- 不同业务场景设置不同安全等级
- 资金类操作增加多重验证
- 定期安全审计与渗透测试
通过全面实施这些防御措施,可有效防范各类验证码相关安全漏洞,保障系统安全。