[i=s] 本帖最后由 one-921 于 2025-7-31 23:29 编辑 [/i]
1. 前言
验证码(Completely Automated Public Turing test to tell Computers and Humans Apart)是一种用于区分人类用户与自动化程序(如机器人)的安全措施。然而,验证码的实现方式不当可能导致其安全性降低,从而形成验证码漏洞。这类漏洞可能被攻击者利用进行恶意操作,例如暴力破解、自动注册等。
2. 漏洞产生原因
验证码漏洞的产生原因主要包括:
- 验证码生成算法简单:验证码的随机性不足,导致攻击者可以通过简单的猜测或暴力破解获得有效验证码。
- 验证码未加有效期:验证码的有效期设置过长,攻击者可以在较长时间内使用已获取的验证码。
- 缺乏二次验证:在重要操作(如注册、登录、修改密码)中,验证码未进行二次验证或没有可靠的后端校验。
- 前端验证不严密:客户端验证容易被绕过,攻击者可以直接发送请求绕过验证码验证。
3. 漏洞的危害
验证码漏洞可能导致的危害包括:
- 自动化攻击:攻击者可以利用漏洞进行暴力破解,获取用户账户。
- 账户接管:攻击者可以通过自动化手段实现账号接管,进行信息篡改或欺诈行为。
- 服务资源耗尽:大量的自动化请求可能导致服务器资源被过度消耗,影响系统的可用性。
- 用户信任降低:频繁的攻击事件可能导致用户对网站的信任度下降,影响品牌形象。
4. 针对验证码漏洞的测试技巧
4.1 聚焦验证码生成机制
- 了解验证码的生成算法,查看其随机性和复杂性。
- 检查验证码的位数、字符集(数字、字母、特殊字符)等配置。
案例详解
下面我将通过几个案例为大家详细解读关于SRC中验证码相关的漏洞解析
案例1:### 短信验证码绕过漏洞
原理:
服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制。
危害:在相关业务中危害也不同,如找回密码,注册,电话换绑等地方即可形成高危漏洞,如果是一些普通信息,个人信息修改的绕过就是中低危。
如下信息修改框,先获取正确的返回包

然后输入错误的返回包,将正确的替换

这里修改后,信息就自动保存成功。
最终获取赏金:50R
案例2:短信验证码四位数爆破漏洞
原理:在我们收到验证码的时候会有一个时间限制,比如60s、五分钟内、24小时内失效,但是往往这些验证码都不会在这个时间内失效,此时我们就可以考虑爆破验证码来获取认证。
(其实此处还有一个漏洞就是如果验证码在规定时间内没有失去效果,也是可以提交的)
常见存在漏洞的功能点:
1、修改密码功能点:修改密码时不需要输入原密码,网站通过验证码决定是否是本用户修改,并且网站的验证码机制没有时间(或者时间在一分钟以外最好,方便爆破)和次数限制,
2、用户注册点:如果可以爆破验证码,此时我们就可以获取任意用户注册漏洞,等级在中 高危 赏金可以达到四位数
3、支付功能点:如果支付时是通过短信验证,而且还是四位数的验证码,也可以尝试爆破
具体实战操作:
1、 工具:yakit
2、 操作:
在短信验证码处抓包,进行爆破
访问测试网站 选择验证码登录,输入一个存在的手机号15555555555,点击获取验证码

然后随意输入验证码1111,点击登录时开启抓包

放到Web Fuzzer进行4位验证码爆破(之所以爆破4位验证码,是因为提前用自己手机号测试时发现验证码为4位) 成功爆破出验证码2159,获取到手机号15555555555用户的token凭证。


关于验证码系列还有四种实战案例,详解请移步验证码漏洞(下)