Files
Sec-Interview/Chapter1/1-10.md
T
2025-10-13 01:29:11 +08:00

28 lines
3.0 KiB
Markdown

### 登录验证码怎么绕过
**1. 验证码本身的设计缺陷**
很多验证码系统本身存在漏洞,这是最容易利用的突破口
- **万能验证码或静态验证码:** 有些开发者为了方便测试,会设置一个固定的“万能验证码”,比如 `1234``abcd`。或者验证码每次刷新都是一样的。这使得攻击者可以轻松地在每次登录尝试时都使用这个固定的值
- **验证码可重复利用:** 正常情况下,验证码使用一次后就应该失效。如果验证码可以重复使用,攻击者就可以通过一次有效的请求获取一个验证码,然后在多次请求中重复使用它来尝试不同的密码
- **验证码在客户端生成:** 尽管非常罕见,但有些不安全的实现是在前端(如JavaScript)生成验证码。这意味着攻击者可以直接在浏览器控制台中获取或修改验证码的值
- **验证码不与会话绑定:** 验证码与用户会话(Session)没有正确绑定。攻击者可以先访问登录页面,获取一个验证码,然后用不同的会话(但使用同一个验证码)来尝试暴力破解,这使得验证码失去了它的防重放作用
**2. 暴力破解验证码**
如果验证码系统本身没有设计缺陷,攻击者可能会尝试通过技术手段识别验证码
- **简单验证码的图像识别:** 对于那些扭曲度低、背景干扰少、字符集简单的验证码(如纯数字、4 位字母),攻击者可以使用 **OCR(光学字符识别)**工具或专门的验证码识别库(如 Tesseract、dlib)进行识别
- **训练模型识别验证码:** 对于更复杂的验证码,攻击者可以收集大量的验证码图片,然后使用机器学习或深度学习技术(如卷积神经网络 CNN)来训练一个模型,以达到较高的识别成功率
- **人工打码平台:** 这是最直接、最有效的方法。攻击者将验证码图片发送到专业的**打码平台**。这些平台背后有大量人工或半自动化工具,可以在极短时间内返回识别结果。这使得攻击者能够以较低的成本实现大规模的自动化攻击
**3. 绕过验证码逻辑**
- **API 接口漏洞:** 有些应用程序的登录过程并非只有一个接口。攻击者可能会发现,用于处理登录的 API 接口与用于获取验证码的接口是分开的。如果登录 API 接口没有强制要求验证码参数,或者在验证码参数为空时依然处理请求,那么攻击者可以直接绕过验证码步骤
- **不安全的登录逻辑:** 攻击者可以尝试多次错误的登录,观察服务器的响应。如果服务器只在第一次登录尝试时返回验证码,或者在多次失败后才返回验证码,攻击者可以利用这个时间差进行快速尝试
- **会话劫持或利用令牌:** 如果应用程序在登录过程中使用了某种令牌(Token),而验证码的验证没有正确与这个令牌关联,那么攻击者可以利用这个漏洞绕过验证码