验证码漏洞利用技巧总结
验证码的设计初衷是为了防止恶意自动操作,如批量注册、暴力破解密码、刷票、垃圾评论等行为,从而保障服务的正常运行和数据的真实性。
由于开发人员开发不规范,攻击者可以绕过或者破解验证码,这些漏洞的存在对网络安全构成了严重威胁。
验证码漏洞不仅会导致个人隐私泄露、账户被盗用,还可能被用于大规模的网络犯罪活动,如分布式拒绝服务攻击(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