### 登录验证码怎么绕过

1. 验证码本身的设计缺陷

很多验证码系统本身存在漏洞，这是最容易利用的突破口

- 万能验证码或静态验证码： 有些开发者为了方便测试，会设置一个固定的“万能验证码”，比如 `1234` 或 `abcd`。或者验证码每次刷新都是一样的。这使得攻击者可以轻松地在每次登录尝试时都使用这个固定的值
- 验证码可重复利用： 正常情况下，验证码使用一次后就应该失效。如果验证码可以重复使用，攻击者就可以通过一次有效的请求获取一个验证码，然后在多次请求中重复使用它来尝试不同的密码
- 验证码在客户端生成： 尽管非常罕见，但有些不安全的实现是在前端（如JavaScript）生成验证码。这意味着攻击者可以直接在浏览器控制台中获取或修改验证码的值
- 验证码不与会话绑定： 验证码与用户会话（Session）没有正确绑定。攻击者可以先访问登录页面，获取一个验证码，然后用不同的会话（但使用同一个验证码）来尝试暴力破解，这使得验证码失去了它的防重放作用

2. 暴力破解验证码

如果验证码系统本身没有设计缺陷，攻击者可能会尝试通过技术手段识别验证码

- 简单验证码的图像识别： 对于那些扭曲度低、背景干扰少、字符集简单的验证码（如纯数字、4 位字母），攻击者可以使用 OCR（光学字符识别）工具或专门的验证码识别库（如 Tesseract、dlib）进行识别
- 训练模型识别验证码： 对于更复杂的验证码，攻击者可以收集大量的验证码图片，然后使用机器学习或深度学习技术（如卷积神经网络 CNN）来训练一个模型，以达到较高的识别成功率
- 人工打码平台： 这是最直接、最有效的方法。攻击者将验证码图片发送到专业的打码平台。这些平台背后有大量人工或半自动化工具，可以在极短时间内返回识别结果。这使得攻击者能够以较低的成本实现大规模的自动化攻击

3. 绕过验证码逻辑

- API 接口漏洞： 有些应用程序的登录过程并非只有一个接口。攻击者可能会发现，用于处理登录的 API 接口与用于获取验证码的接口是分开的。如果登录 API 接口没有强制要求验证码参数，或者在验证码参数为空时依然处理请求，那么攻击者可以直接绕过验证码步骤
- 不安全的登录逻辑： 攻击者可以尝试多次错误的登录，观察服务器的响应。如果服务器只在第一次登录尝试时返回验证码，或者在多次失败后才返回验证码，攻击者可以利用这个时间差进行快速尝试
- 会话劫持或利用令牌： 如果应用程序在登录过程中使用了某种令牌（Token），而验证码的验证没有正确与这个令牌关联，那么攻击者可以利用这个漏洞绕过验证码