【Web安全攻防从入门到精通】验证码漏洞
验证码漏洞
分类
- 图片验证码
通过在图片上随机产生数字、英文字母、汉字或者问题进行验证。伴随OCR技术的发展,能够轻易被破解
- 手机短信验证码
可以比较准确和安全地保证购物的安全性,验证用户的正确性,是最有效的验证码系统。
- 行为式验证码
行为式验证码是通过用户的某种操作行为来完成验证,如拖动式验证码、点触式验证码
- 拖动式验证码:类似于手机的滑动解锁,将滑块拖动到指定位置完成验证
- 点触式验证码:选择图片中与文字描述相符的内容完成验证
- 语音验证码
常用于网站、移动客户端、银行金融等用户身份验证,以及支付确认等安全性要求更高的即时服务。
- 视频验证码
视频验证码将随机数字、字母和中文组合而成的验证码动态嵌入MP4、flv等格式的视频中,增大了破解难度。可以有效防范字典攻击、穷举攻击等。
危害
- 恶意攻击者对账号密码利用工具进行暴力破解
- 任意用户登陆
- 验证码缺失利用抓包工具对目标网站或个人实施短信轰炸
漏洞检测
通用设计缺陷
- 验证码无效
无论输入什么都判断验证正确
- 验证码由客户端生成、验证
验证码由客户端JS生成并且仅仅在客户端用JS验证
检测:判断验证码是否仅由客户端验证
- 验证码回显
验证码在HTML或Cookie中显示,或者输入到Response Headers的其他字段,可被直接查看
检测:查看HTML源码或者对相应包进行分析
- 验证码固定
也叫验证码重复使用,是指验证码没有设置使用期限,首次认证成功后诶呀删除Session中的验证码,使得验证码可以多次被验证成功。
检测:填写正确登录信息和验证码,然后抓取提交数据包,重复提交该数据包,登陆成功则存在验证码重复使用的问题。注意,可通过修改与验证码无关的参数的大小来实现多次提交,自设一个字典作为该参数Payload。
- 验证码可爆破
服务端对验证时间、次数做出限制,存在爆破的可能性。
检测:利用BurpSuite对验证码参数进行暴力破解
- 验证码可猜测
验证码设置比较简单,可能只有数字或者字母组成,也可能是其设定范围有限,导致验证码内容可被猜测。
检测:根据已有验证码对验证码设定范围进行猜测。
- 验证码可绕过
由于逻辑缺陷,可绕过,常见绕过方式有直接删除Cookie、验证码参数为空、直接删除验证码参数可绕过和修改Response状态值等,也可根据情况组合以上绕过方式
检测:利用BurpSuite更改请求包数据进行多次测试。
短信验证码
很多系统的短信验证码接口存在逻辑问题,因此产生的危害也很多,比如短信轰炸、任意用户注册、任意用户重置密码等,还可能导致CSRF。
短信验证码漏洞通常出现在注册登录、密码找回、敏感信息修改、获取等模块。
- 短信轰炸
这类漏洞存在的原因是没有对短信验证码的发送时间、用户及其IP做一些限制。
检测:抓包后利用Burp Suite的重放功能,结果均返回成功
- 任意用户注册
没有将短信验证码与手机绑定,可通过更改手机号填写
- 任意用户密码重置
一般出现在密码找回模块,系统没有将发送的短信验证码与手机绑定,可通过修改手机号获取验证码进行绕过,重置和登陆该用户的账号、密码。
但也有一种情况就是,系统将发送的短信验证码与手机绑定了,但没有将该手机号和相应账号绑定,还是可以绕过。
修复
修复时建议使用安全性强的验证码。
可以从一下方面保证验证码的安全性:验证码长度不低于4位,至少同时包含数字、字母或汉字,增加干扰因素如线条等,避免使用容易被程序自动识别的验证码。此外也可通过以下方式修复:
- 验证码不应由客户端生成或返回客户端
- 系统在开发时注意验证识别后销毁Session中的验证码
- 用户提交的验证码不能为空
- 短信验证码不少于6位,有效期不超过1分钟,验证码错误次数超过上限采取账户锁定策略。