理论基础
-
服务端验证码绕过介绍
验证码绕过是一大类漏洞的概述,主要针对验证码缺陷进行攻击,而验证码又包含图形验证码、短信验证码、语音验证码,邮箱验证码等。一个安全的验证码机制在生成和验证阶段不可能同时由不受信任的用户控制,且生成的每个验证码生命周期一定要确保一次性使用(不管验证成功与否),否则会被轻易的绕过。此外还要确保验证码的复杂度和生成方法安全。
此处的服务端验证码绕过漏洞即复现了一个可重复使用的图形验证码。
-
验证码的定义
验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
-
验证码服务端绕过漏洞成因
验证码在验证成功后没有及时刷新缓存,使验证码可以重复使用,造成该登录接口在保持正确验证码不变的情况下可以对密码进行暴力枚举。
- 图形验证码其他漏洞
- 验证码响应包返回。
- 验证码使用成功后未销毁(可复用)。
- 生成验证码的字符集可控(可预测)。
- 验证码存放位置暴露。
- 验证码在前端生成校验。
- 验证码尺寸长度可控。
- 验证码过于简单,可轻易机器识别(OCR)。
- 置空验证码绕过。
- 错误超过一定次数才开启验证码。
- 其他类型验证码安全进阶
- 短信验证码绕过:腾讯社区-关于验证码的那些漏洞、先知-浅谈短信验证码漏洞
- 邮箱验证码绕过:腾讯社区-业务安全之短信&邮箱验证码
-
验证码服务端绕过修复
完善验证码机制,确保验证码在使用后立即刷新且不出现其他的验证码缺陷问题。
实践学习
漏洞环境以Pilot靶场为例:下载地址与部署教程
-
在WEB页面登录任意账号,输入正确的验证码,并抓包:
-
可以发现登录请求包附带了页面输入的验证码,此时修改密码为错误密码,并重放:
-
请求包在没有修改验证码的情况下,提示“用户名或密码错误”,而不是验证码错误。
-
此时再修改密码为正确密码,验证码不变,依旧可以登录成功:
-
可以发现,验证码虽然经过服务端验证,但是在登录失败时或登录成功后,验证码均未刷新。
-
因此只需服务端首次完成验证码判断后,固定参数
code
值不变,则仍可进行密码枚举。