验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,
0x01: 验证码机制原理
1. 客户端发起一个请求。
2. 服务端响应请求,并生成一个新的sessionID和验证码。
3. 服务端将新的sessionID和验证码一起发给客户端。
4. 客户端提交验证码和sessionID给服务端。
5. 服务端验证验证码同时销毁当前sessionID的验证码,返回验证结果给客户端。
0x02:本地js生成并验证
有的时候我们在进行暴力破解登陆信息时,会遇到需要输入验证码的情况,而这种on client 是在前端的地方写了一个js来生成验证码,通过抓包分析后,这个验证码只是个纸老虎,是不会在后台进行验证的,所以我们可以轻松绕过验证码。
- 本地禁用js,可以直接废掉验证码验证机制。
- 举例Chrome关闭JS方法。
0x03:服务端生成验证码通过cookie或者response header返回
可以通过读取每次返回到HTML中的验证码字段,使用BP选取字段,自动填充,完成自动填写验证码,进行字典攻击。
0x04:服务端验证码不过期或者过期时间长
如果验证码是在服务端验证的,但是这样也会存在问题,如果服务端在验证验证码后不立即销毁验证码,验证码不会过期,导致一个验证码可以多次使用同一个验证码一直来进行攻击。
这里第一次抓到的包,修改了验证码后的结果
我们再次使用这个验证码,此时我们也修改了password字段,出现了同样的结果,说明这个验证码过期时间内是可以重复使用的,可以重复利用。使用BP intruder模块暴力破解。
0x05:验证码自动识别
有的系统虽然使用了验证码功能,但是验证码太过薄弱,导致可以使用工具进行识别。
- F12查看生成验证码的URL
- 自动识别验证码工具:PKAV HTTP FUzzer
0x06:验证码图片大小可控
请求的验证码图片如果大小可以控制的话,我们可以利用这个可控点实施DOS攻击。