图片验证码
验证码前端检测
验证码由客户端JS生成并且仅仅在客户端用JS验证,通过抓包看数据传输是否有验证码字段或者是关闭JS看能否通过验证。
测试方法:当我们开始抓包,输入任意验证码,页面提示验证码错误,且没有抓到数据包,则说明此时的验证码是通过前端效验的
- 演示案例— 输入错误验证码客户端立即提示错误并且未传输数据包。
- 输入正确验证码后,成功进行了数据交互,尝试在数据包中删除验证码
- 可见验证码并未带入数据请求过程中,只存在与前端进行校验
验证码复用
使用的验证码没有进行销毁处理,可以重复使用。
测试方法:重放多次同一个带有验证码的数据包,如果两次响应提示都是账号或密码这样的错误,则说明漏洞存在,若第二次重放的数据提示验证码错误,则说明该漏洞不存在。
1.输入正确验证码进行请求,可见请求成功。
- 在数据包中更改用户信息,使用原验证码,仍可进行登录请求。
验证码DOS
漏洞原理:图形验证码的生成大多都基于复杂的图像生成算法,本来就很消耗CPU,GPU性能,此时攻击者再把尺寸增大,就会成倍消耗性能,如果大到一定程度再结合高并发,服务器很有可能瞬间崩溃,也就造成了DOS攻击
修改数据包验证码的长宽,如果响应字节变大则存在该漏洞
例如:http://127.0.0.1/pikachu/inc/showvcode.php?1722243693720?width=11111&height=11111
可关注图片验证码是否大小发送变化,网站请求延迟是否变高来判断
验证码为空或万能验证码
在程序设计时为了方便测试,设置了空验证码或万能验证码
mobile=18888888888&code=
mobile=18888888888&code=null
mobile=18888888888&code=0000
mobile=18888888888&code=8888
验证码可爆破
对于验证码位数4-6为并且没有次数限制和时间限制,我们均可进行验证码的爆破
- 获取验证码为4位验证码,且有效期为30分钟,可进行爆破
- 添加payload后,设置验证码位数,开始爆破。
- 4位验证码几分钟即可爆破成功。
验证码返回包回显
在获取验证码时,验证码会显示在返回包中或在请求中携带。
可任意进行注册账户,或找回密码。
修改返回包
拦截响应包后,可将响应中的关键值,如 302、403改为200,将false改为true,将-1,1改为0等操作进行尝试。
短信轰炸
在短时间内对同一手机号验证码发送次数没有限制,导致可大量发送验证码到同一账户,造成用户骚扰与资源浪费。
通常可以在手机号处增加特殊符号来绕过,如+、86、0086、+86、英文逗号、&、@、等等。
或在手机号处设置多手机号,致使同时给多手机发送验证码。
邮箱大小写
在邮箱验证时,有时会提示验证频繁,导致邮箱不可用,可以采取大小写组合来发送,如123@qQ.com 。