长亭百川云 - 文章详情

验证码漏洞利用技巧总结

W

115

2024-07-04

验证码漏洞利用技巧总结

    验证码的设计初衷是为了防止恶意自动操作,如批量注册、暴力破解密码、刷票、垃圾评论等行为,从而保障服务的正常运行和数据的真实性。

由于开发人员开发不规范,攻击者可以绕过或者破解验证码,这些漏洞的存在对网络安全构成了严重威胁。

    验证码漏洞不仅会导致个人隐私泄露、账户被盗用,还可能被用于大规模的网络犯罪活动,如分布式拒绝服务攻击(DDoS)、网络欺诈等,给用户、企业乃至社会带来不可估量的损失。

    本文从短信验证码、图形验证码这两块内容进行技巧总结,如果还有遗漏的,望各位大佬多指点指点。

01

短信验证码

SMS Verification

1、短信轰炸

    (1)没有对短信发送进行合理的次数限制,攻击者可以多次发送短信,造成短信轰炸,消耗短信资源。登录界面、忘记密码、用户注册等所有短信验证码发送点都可以试试。

    可以把数据包放Repeater里面无数次重放,也可以放Intruder选择Null payloads,发送指定次数的数据包,对同一手机号进行批量短信发送。

    也可以通过遍历手机号,对不同的手机号进行短信发送,但是很多单位不认这个漏洞,暂时不写吧。

    (2)单线程不行?并发试试呢。

    并发漏洞是指在多线程或多进程环境中,由于对共享资源的访问没有正确的同步控制,导致程序行为异常或安全问题的漏洞。

使用turbo intruder插件进行并发,造成短信轰炸。

2、特殊格式绕过

    手机号前后增加以下字符串,实现绕过,进行短信验证码发送。

        空格( )

        加号(+)

        86

        086

        0086

        +86

        0

        00

        /r

        /n

        ,

        特殊符号等

    为什么插入特殊字符可以实现绕过呢?

    举个例子:

    加空格,在前端检测手机号的时候,会检测该手机号是否发送过短信,但是手机号末尾加的空格在进入数据库时会被过滤掉,所以无论添加多少个空格,最后进入数据库里的号码不变,但是绕过了前端检查。

    +86代表国内的手机号,前面加上+86或者086也代表了该手机号。

3、取前11位绕过

    例如188888888881为12位,经过短信网关后,取前11位,批量发送导致短信轰炸。

4、删除cookie绕过

    部分开发在代码中设置,根据cookie判断短信验证码是否获取过,可以尝试把cookie删除掉,进行短信轰炸。

5、短信验证码转发

开发人员开发不规范,导致可以同时发送验证码给两个手机号。

phone=number,number

phone=number&phone=number

6、提交其他用户的手机验证码

    验证码和手机号未进行绑定,导致可以提交其他手机号的验证码进行验证。

    举个例子:

    A用户的A手机号收到的验证码为aaaa。

    B用户的B手机号收到的验证码为bbbb。

    A用户使用B用户的验证码bbbb也可以正常进行登录A用户等业务操作。

7、修改手机号绕过

    忘记密码、支付验证等大量业务环境中均有可能存在该漏洞。

    A用户绑定了A手机号,在进行忘记密码等业务操作时,正常的业务流程为A用户向A手机号发送短信验证码aaaa,使用A手机号的短信验证码aaaa完成A用户的业务操作。

    修改手机号绕过是在A用户向A手机号发送验证码时,抓取数据包,修改A手机号为B手机号,B手机号收到验证码bbbb,使用B手机号的验证码bbbb完成A用户的业务操作。

8、修改返回包绕过

    修改返回的值false 为 success(只是举例,根据实际情况进行修改),如果前端校验的话,可以实现短信验证码绕过。

    如果忘记密码功能是分步验证,那通过修改返回包可以跳过验证码验证步骤,直接进入忘记密码界面进行设置新密码。如果是登录界面的话,可以直接进入后台。

9、删除验证码参数绕过

    跟图形验证码一样,删除短信验证码参数即可。

10、验证码暴力破解

    当验证码强度不够并且服务器没有对验证码的提交次数、验证时间等参数进行限制时,可以尝试对验证码进行暴力破解。

    如果验证码只有4位数字的情况下,爆破成功的概率是很高的。

11、万能验证码

    不管收到的短信验证码为多少,验证码参数输入000000、888888、111111、123456等就能直接实现登录操作。

    备注:在系统测试的时候设置了固定值,方便调试,系统上线时忘记删除就会导致该漏洞的存在。

12、短信验证码回显

    短信验证码在返回包里面?注意看数据包的返回情况,有时候会有意外收获。

13、验证码可编辑

    部分短信发送接口,前端界面就正常的短信发送界面,但是抓取数据包以后,通过修改参数里面的短信发送内容,可以实现短信内容自定义。

    短信内容自定义如果被恶意利用(插入钓鱼链接、恶意代码等),可以成为传播恶意信息的渠道。

14、验证码存在规律

    多发送几次验证码以后,发现验证码存在一定的规律,可以根据该规律推测出下一次发送的验证码。

02

『图形验证码』

Graphic Verification

1、图形验证码不失效

    验证码一直输入的vcode=VI8J5,返回的报错为“username or password is not exists~”,而不是验证码错误的相关报错,验证码不失效,导致可以直接对用户名和密码进行暴力破解。

    备注:有时候在真实环境中,因为获取到新验证码或者界面刷新以后,无法使用原图形验证码进行验证,所以我们需要拦截数据包(Intercept is on),然后用拦截的数据包去Intruder爆破用户名或者密码,爆破结束以后再放开数据包(Intercept is off)。

2、图形验证码前端验证

    前端界面验证了验证码,但是后端没有进行验证,我们在输入界面输入正确的验证码,然后抓取数据包,放Intruder里面直接对账户密码暴力破解。   

3、图形验证码设置为特定值

    修改图形验证码参数为null或者true,可以实现对账户密码的暴力破解操作。

    备注:测试环境下,为了提高工作效率,将验证码设置为null参数,或者开发在进行图形验证码判断的时候,只要是图形验证码收到的是true就会通过。系统上线时忘记删除就会导致该漏洞的存在。

4、删除图形验证码参数

    真实环境中遇到过,看了一下不好打码的,就假装这里有图吧。

    当时是存在验证码参数导致不能遍历用户参数,删除验证码参数,即可进行用户遍历,获取所有用户的敏感信息。

    举个例子:

    原请求参数:

username=admin&password=admin123456&vcode=VI8J5

    删除验证码后参数:

    username=admin&password=admin123456&vcode=或者username=admin&password=admin123456

5、图形验证码未校验

    设置了验证码参数,但是服务器端并没有效验,乱输图形验证码也能够成功的登录。

6、图形验证码回显

    图形验证码的值回显在返回包中。可以考虑结合脚本进行利用。

7、图形验证码进阶

    有验证码,绕不过怎么办?上工具captcha-killer-modified。

    攻击类型选择“pitchfork”,即可对验证码进行识别,跟随数据包进行发送,对账户密码进行暴力破解等操作。

    备注:该工具识别成功率在85%左右。

03

『参考文档』

https://forum.butian.net/share/2602

『END』

监制丨船长、铁子

策划丨Cupid

美工丨molin

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2