侵删验证码绕过(高风险)的风险分析及解决办法

admin 发布于 2023-12-31 阅读(332)

优质文章,及时送达

文章内容源自CSDN,原文链接(侵删)

验证码绕过(高风险)

风险级别:高风险

风险描述:服务端没有对验证码进行二次验证,导致攻击者可以利用修改返回值的方式直接跳转到设置新密码的页面,然后重置用户密码;

风险分析:通过修改返回数据包,可绕过短信/邮箱验证码直接重置该账号密码;

风险修复:服务端对手机/邮箱的验证码进行二次校验;

什么是验证码?

是(全自动区分计算机和人类的图灵测试)的简称,是用于区分计算机和人类的一种程序算法,这种程序必须能生成并评价人类能很容易通过但计算机却通不过的测试。

验证码机制原理

客户端发起请求->服务端响应并创建一个新的同时生成随机验证码,将验证码和一并返回给客户端->客户端提交验证码连同给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。

验证码的重要性:(防止认证相关的攻击)

例如:

登录:缺少验证码,攻击者可通过暴力破解的方式非法接管用户账户。

注册:程序批量创建垃圾账户。

避免垃圾邮件和DDOS:

网站具有提交表单的功能,并需要由站点管理员审核通过。大量的垃圾表单可能产生,会影响网站的访问速度,加大站点管理员的工作量,而且一些合法用户的请求,也可能会因此被拒绝服务。

电子邮件/短信轰炸(高风险)

如果没有得到有效的验证保护,那么恶意攻击者则可以利用程序,向目标发送大量的垃圾邮件。短信验证功能可向绑定手机发送任意次数验证码;

该漏洞可向绑定手机发送验证信息,可以用自写脚本遍历银行卡号发送任意数量短信,影响用户体验以及造成短信服务过度消费;

验证码安全漏洞:

**验证码绕过:

常见的两种验证机制是图片验证码和短信验证码。设置验证码就是为了防止自动化攻击,但是如果没有设计好的话就形同虚设。

**图片验证码绕过:

常见的几种图片验证码被绕过的场景:图片验证码输入一次正确可重复使用;图片验证码前端校验;图片验证码可被识别;验证码信息返回客户端等等。

1. 验证码不刷新

登录密码错误之后,中的值并没有更新,验证码没有发生改变。验证码不刷新通常有以下两种情况:无条件不刷新、有条件不刷新。

1.1 无条件不刷新

指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对用户帐号进行暴力破解。

1.2 有条件不刷新

登录失败后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。这种情况下,只要我们不关闭新窗口或弹窗,配合使用的模块就可以进行暴力破解了。

2. 验证码前端可以获取

验证码通常会被开发者隐藏在网站的源码中或者隐藏在请求的中,但这两种情况都可以被轻松绕过。

2.1 验证码隐藏在源码中

Ctrl+u查看源代码,搜索验证码,成功匹配后,就可以写入工具,提取源码中的验证码并将其放入每次请求的报文中,来进行帐号破解。

2.2 验证码隐藏在中

提交登录 > 抓包,然后分析数据包中的字段,寻找相匹配的验证码,或者是经过了一些简单加密后的验证码。

3. 验证码空值绕过

验证码空值绕过,可以通过直接删除验证码参数或者中的值来绕过判断,进行暴力破解。

4. 验证码易识别

在漏洞挖掘过程中,如果登录的验证码非常简单且易于识别,那我们就可以使用自动化工具来进行登录破解,如PKAV的HTTP 。

客户端与服务端可能存在的安全性问题

客户端可能存在的安全问题

网站验证码由本地js生成仅仅在本地用js验证。可以在本地禁用js,用工具把验证字段删除。

网站把验证码输出到客户端html中,送到客户端或 。

网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在中写入一个标记,用来记录错误数量,则可以不更新中的值反复提交,验证码就不会出现。

服务端可能存在的安全问题

验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在中带固定的和固定的验证码字符串。

没有对验证码进行非空判断,导致可以直接删除验证码参数。

验证码绕过漏洞流程与修复建议:

程序员设计验证码的功能流程一般是这样的:先判断用户的手机号是否为正常的手机号长度,再一个判断手机号里是否掺杂一些恶意的参数,正确无误后,就开始发送验证码给手机。

但在这样的设计流程里,会导致出现验证码绕过直接发送的漏洞;

建议方案:我们可以增加过滤条件,多去判断与校验,比如手机号发送后,间隔1分钟,服务器端再次检查是否发送者都是同一个手机号等等。

聊一聊“验证码”

我们一般用验证码来做什么?

登陆暴力破解

防止机器恶意注册

1.验证码的认证流程客户端登陆页面,后台生成验证码:

.后台使用算法生成图片,并将图片给客户端;

.同时将算法生成的值全局赋值存到中;

2,校验验证码:

.客户端将认证信息和验证码一同提交

.后台对提交的验证码与里面的进行比较;

3,客户端重新刷新页面,再次生成新的验证码:

.验证码算法中一般包含随机函数,所以每次刷新都会改变;

.验证码会过期;

在前端生成验证码并核对验证码,在安全性上面是非常不靠谱的。

设计安全的验证码(安全的流程+复杂的图形)

在前端生成验证码后端能验证验证码的情况下,对验证码有效期和次数进行限制是非常有必要的,我们需要设计出复杂的图形;

对认证错误的提交进行计数并给出限制,验证码用完后销毁,能有效防止暴力破解;

双因素认证:

token 是在后端代码中的一组随机生成数,在每次登陆时,会有一组隐藏的随机数加在登录账号和密码上进行验证,从而增强安全性,一般的做法:将token以“type=‘’ ”的形式输出在表单中;在提交认证的时候一起提交,并在后台进行验证。

漏洞总结:

在网站的安全渗透测试中,网站的验证码绕过漏洞发生的也比较常见,一般程序员在设计整个验证码功能的时候并没有详细的考虑到会被构造恶意的参数进行直接提交,导致服务器端没有做过滤,直接绕过验证码的验证过程,一般发生在网站里找回密码功能,以及用户注册功能,修改重要资料需要验证码验证。

网站里的验证码分很多种:图形验证码、短信验证码、邮件验证码。

图形验证码:在获取之后,而数据库里历史获取到的验证码还是可以继续正常用,这就造成了网站可以绕过验证码的功能,可能造成的攻击危害是不断的提交注册,导致数据库里的会员账号增多,大量的机器人注册,给服务器以及数据库造成了堵塞。

短信验证码的绕过:一般找回密码时需要获取验证码,短信验证码一般是以3-7位数字的验证码,如果用自动化工具爆破很快就可以猜解出来。

验证码重放攻击(中风险)

漏洞描述:在提交信息的时候,输入的验证码通过抓包进行重放,重放时验证码没有进行重置更新,造成重复信息提交,可能引起重放攻击;

风险分析:可能遭到恶意攻击者进行重复留言,恶意注册等重放攻击;

修复方案:后台校验验证码的使用测试和时间;

参考博客:

标签:  验证 绕过 刷新 提交 漏洞 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。