Captcha module¶
0x01 漏洞描述¶
验证码模块为线上应用系统中最常用的模块,涉及用户模块、业务逻辑、支付模块等几乎所有模块。验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。通常将验证码模块分为两类:短信or邮箱验证码、图形验证码。
0x02 常见应用场景¶
2.1 图形验证码¶
- 没有销毁,可复用:图形验证码要遵循一个原则,在一次对比之后,无论用户输入正确与否,都有立刻将验证码销毁
- 图形验证码前端校验
- 图形验证码校验一次,永久使用
- 图形验证码过于简单可被简单程序识别
- 图形验证码在响应包、响应头、cookie中
2.2 短信/邮箱验证码¶
- 短信/邮箱验证码四位,可被爆破
- 短信/邮箱验证码未失效或失效期过长,可被爆破
- 短信/邮箱验证码未和手机号或用户身份等做绑定
- 短信/邮箱验证码规则简单,可被猜测到
- 短信/邮箱验证码可预测
- 短信/邮箱验证码没有验证次数限制
- 万能验证码
-
短信/邮箱验证码在响应包、响应头、cookie中
-
短信/邮箱验证码用于手机短信/邮箱轰炸
- 短信内容自定义:常出现在一些发送短信的后端管理系统中,容易出现类似钓鱼等类型的攻击
- 短信平台自身问题
0x03 漏洞危害¶
验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。
0x04 修复建议¶
4.1 图形验证码¶
- 验证码后端随机生成,且验证码内容不能出现在客户端的网页源代码以及response数据包中。
- 验证码要有背景干扰,干扰元素包括:颜色、位置、数量且元素需要随机变化。
- 验证码后端校验,且使用一次后即失效。
- 验证码在不同场景下需要与请求的参数一起提交给后端进行校验,且优先校验验证码。
4.2 短信验证码¶
- 请求获取短信接口添加图形验证码。
- 单位时间内:单个IP、单个手机号设置请求限制,具体需要根据场景而定。
- 单个手机号每日短信验证码获取上限。
- 发送短信接口地址白名单。
4.3 其他验证途径¶
- 语音验证码
- Google reCaptcha
- 滑动验证码
- 点选验证码