主页

返回

验证码安全

验证码相关的安全漏洞分类、攻击方式、CVE案例及防御措施

漏洞分类#

验证码安全漏洞在权威安全标准中的分类:

标准编号名称说明
CWECWE-804Guessable CAPTCHA可被猜测/绕过的验证码
CWECWE-307Improper Restriction of Excessive Authentication Attempts未正确限制过多认证尝试
CWECWE-1390Weak Authentication弱身份验证(父类)
OWASPOAT-009CAPTCHA Defeat验证码破解自动化威胁
OWASP Top 10A07:2025Authentication Failures认证失败

攻击方式#

1. 验证码暴力破解#

原理: 穷举尝试所有可能的验证码组合。

攻击条件:

  • 4-6位纯数字验证码
  • 无请求频率限制
  • 无尝试次数限制
  • 验证码长时间有效

利用方式:

# Burp Intruder 暴力破解示例
POST /api/verify HTTP/1.1
code=§0000§  # 设置 0000-9999 的 payload
plaintext

2. 短信轰炸#

原理: 滥用短信发送接口,向目标手机号发送大量验证短信。

攻击条件:

  • 发送接口无频率限制
  • 无图形验证码前置
  • 接口未做身份验证

利用方式:

# 批量发送脚本示例
import requests
for i in range(1000):
    requests.post('/api/send-sms', data={'phone': '13800138000'})
python

3. 验证码绕过#

原理: 通过篡改请求/响应来绕过验证。

常见手法:

手法说明
删除参数删除请求中的 captcha 参数
修改响应将响应中的 false 改为 true
空值绕过发送空的验证码值
替换手机号在验证步骤替换为攻击者手机号
复用验证码重放已使用的有效验证码

4. 验证码识别#

原理: 使用 OCR/AI 自动识别图形验证码。

工具:

  • Tesseract OCR
  • ddddocr (针对国内验证码)
  • 打码平台 API

5. 客户端泄露#

原理: 验证码答案在前端暴露。

检查点:

  • 响应 JSON 中包含答案
  • 图片文件名包含答案
  • 前端 JS 变量中存储答案
  • Console 日志输出答案

CVE 案例#

CVE 编号产品漏洞类型
CVE-2025-24628WordPress Google Captcha 插件验证码绕过 (CWE-290)
CVE-2025-26312SendQuick Entera删除参数绕过
CVE-2023-48745WordPress Captcha Code 插件验证码绕过
CVE-2023-44235WP Captcha暴力破解
CVE-2023-3897SureMDM用户枚举

防御措施#

验证码设计#

  • 长度 ≥ 6 位
  • 混合数字+字母
  • 有效期 ≤ 5 分钟
  • 使用后立即失效
  • 足够的图像扭曲/干扰

接口防护#

  • 请求频率限制 (Rate Limiting)
  • 错误次数限制 + 账户锁定
  • 图形验证码前置
  • IP 级别限制
  • 服务端严格校验

监控告警#

  • 异常请求日志记录
  • 短信发送量监控
  • 验证失败率告警

测试方法#

  1. 暴力破解测试: 使用 Burp Intruder 测试是否有频率限制
  2. 绕过测试: 删除/修改验证码参数观察响应
  3. 重放测试: 重复提交同一验证码
  4. 客户端检查: F12 检查响应和 JS 变量

参考资料#