跳转至

Captcha module

0x01 漏洞描述

验证码模块为线上应用系统中最常用的模块,涉及用户模块、业务逻辑、支付模块等几乎所有模块。验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。通常将验证码模块分为两类:短信or邮箱验证码、图形验证码。

0x02 常见应用场景

2.1 图形验证码

  • 没有销毁,可复用:图形验证码要遵循一个原则,在一次对比之后,无论用户输入正确与否,都有立刻将验证码销毁
  • 图形验证码前端校验
  • 图形验证码校验一次,永久使用
  • 图形验证码过于简单可被简单程序识别
  • 图形验证码在响应包、响应头、cookie中

2.2 短信/邮箱验证码

  • 短信/邮箱验证码四位,可被爆破
  • 短信/邮箱验证码未失效或失效期过长,可被爆破
  • 短信/邮箱验证码未和手机号或用户身份等做绑定
  • 短信/邮箱验证码规则简单,可被猜测到
  • 短信/邮箱验证码可预测
  • 短信/邮箱验证码没有验证次数限制
  • 万能验证码
  • 短信/邮箱验证码在响应包、响应头、cookie中

  • 短信/邮箱验证码用于手机短信/邮箱轰炸

  • 短信内容自定义:常出现在一些发送短信的后端管理系统中,容易出现类似钓鱼等类型的攻击
  • 短信平台自身问题

0x03 漏洞危害

验证码模块通常是用来抵御攻击者攻击的常用手段。一旦验证码模块存在逻辑缺陷,将导致对应的业务逻辑存在极大风险。

0x04 修复建议

4.1 图形验证码

  • 验证码后端随机生成,且验证码内容不能出现在客户端的网页源代码以及response数据包中。
  • 验证码要有背景干扰,干扰元素包括:颜色、位置、数量且元素需要随机变化。
  • 验证码后端校验,且使用一次后即失效。
  • 验证码在不同场景下需要与请求的参数一起提交给后端进行校验,且优先校验验证码。

4.2 短信验证码

  • 请求获取短信接口添加图形验证码。
  • 单位时间内:单个IP、单个手机号设置请求限制,具体需要根据场景而定。
  • 单个手机号每日短信验证码获取上限。
  • 发送短信接口地址白名单。

4.3 其他验证途径

  • 语音验证码
  • Google reCaptcha
  • 滑动验证码
  • 点选验证码