逻辑漏洞:验证码相关的逻辑漏洞
逻辑漏洞:验证码相关的逻辑漏洞
验证码是保障账户安全的重要防线,但其在实际应用中往往存在各种逻辑漏洞。本文将详细介绍六种常见的验证码逻辑漏洞类型,并通过实际案例和靶场演示进行说明。
1. 无效验证码
无效验证码是指验证码模块与业务功能没有进行关联性验证。例如,在密码重置场景中,即使输入错误的验证码,也能成功更改密码。这种漏洞通常在新上线的系统中较为常见。
2. 任意用户注册
这种漏洞允许攻击者通过抓包篡改手机号码,使用任意手机号进行注册。具体步骤如下:
- 使用自己的手机号接收验证码
- 在设定密码页面进行抓包
- 篡改手机号码,使用任意手机号进行注册
3. 客户端验证/回显绕过
客户端验证是不安全的,可能会导致任意账号的注册、登录以及重置任意用户等一系列问题。有的时候会直接在前端显示验证码的明文信息。
pikachu靶场客户端验证绕过演示
pikachu靶场下载链接:https://github.com/zhuifengshaonianhanlu/pikachu
打开靶场后,来到暴力破解这里,然后点击验证码绕过(on client)
可以看到时一个登录框,并且有验证码,那么就来在登录的时候尝试抓包看看:
这个先输入的是正确的验证码,然后发送到重放模块中进行重放
可以看到时登录成功的,那么下面我尝试更改了一下验证码再进行发送:
可以看到还是显示登录成功,这说明验证码只是在前端进行了检查,后端没有进行检查,这样的验证码就失去了它存在的意义了
phpyun系统客户端回显绕过演示
下载地址:php云人才系统3.2提取码:qc8y
安装完成后,注册了一个用户test123/test123
然后来到个人资料这里绑定手机号:
这里尝试绑定手机号,在绑定的同时进行抓包:
抓包,发现第一个包没有验证码的值
然后放包后,重新点击了发送验证码发现第二次有验证码:
然后我们就可以成功使用该验证码绑定了手机号,点击保存
然后这里将新的验证码进行:
修改后放包:
可以看到已经成功的利用验证码回显逻辑漏洞绑定了手机号了
4. 验证码可爆破
短信验证码一般由4位后者6位数字组成(还有特殊情况,字母数字组合等等),若服务器未对验证时间,次数进行限制,则存在爆破的可能;
输入手机号获取验证码,输入任意验证码,抓包放到Intruder模块,将短信验证码字段设置伪payload,然后取值范围设定好,进行暴力破解,根据返回响应包的长度判断是否爆破成功
这里我还真遇到过一个真实的案例,是一个APP的登录就是4为位数的验证码并且10分钟内有效足以从1111爆破到9999了,这里就直接给一个成功的截图:
可以看到只有这个2298的长度不同,使用这个值就可以成功登录了
5. 验证码与手机未绑定
一般来说短信验证码仅能使用一次,验证码和手机号未绑定,验证码一段时间内有效,那么就可能出现如下情况:
- A手机验证码,B可能拿来用
- A手机在一定时间间隔内接收到两个验证码,都可以用;
- 检测接收验证码的手机号和绑定的手机号是否一致
例如:任意用户密码重置漏洞
- 使用自己的手机号收到验证码
- 自己的验证码和对方手机号填上,下一步就是设置新的密码了
6. 验证码复用
验证码复用原理其实简单来说就是再某种条件下验证码并没有被刷新,然后被恶意利用,或者再使用完后并未被销毁,而被重复利用。
这里我还是使用pikachu靶场进行演示:
进入靶场后来到验证码绕过(on server)页面
首先我们看看输入后的反应都是什么
验证码输入正确:
验证码输入错误:
可以看到验证码正确提示用户名或者密码错误,验证码错误会直接提示验证码输入错误
然后我们抓包测试:
我们在输入了正确的用户名,错误密码,正确的验证码的情况下,抓包,发到重放模块中:
可以看到这里显示用户名或者密码错误,这是没有问题滴
下面修改为正确的密码看看会有什么反应:
按道理应该是提示验证码错误,但是这里就直接登录成功了,说明存在验证码重放的问题
到此,验证码相关的基础知识和实操就和大家分享到这里了。