4.13. 逻辑漏洞 / 业务漏洞

4.13.1. 简介

逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。

在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。

4.13.2. 安装逻辑

  • 查看能否绕过判定重新安装
  • 查看能否利用安装文件获取信息
  • 看能否利用更新功能获取信息

4.13.3. 交易

4.13.3.1. 购买

  • 修改支付的价格
  • 修改支付的状态
  • 修改购买数量为负数
  • 修改金额为负数
  • 重放成功的请求
  • 并发数据库锁处理不当

4.13.3.2. 业务风控

  • 刷优惠券
  • 套现

4.13.4. 账户

4.13.4.1. 注册

  • 覆盖注册
  • 尝试重复用户名
  • 注册遍历猜解已有账号

4.13.4.2. 密码

  • 密码未使用哈希算法保存
  • 没有验证用户设置密码的强度

4.13.4.3. 邮箱用户名

  • 前后空格
  • 大小写变换

4.13.4.5. 手机号用户名

  • 前后空格
  • +86

4.13.4.6. 登录

  • 撞库
    • 设置异地登录检查等机制
  • 账号劫持
  • 恶意尝试帐号密码锁死账户
    • 需要设置锁定机制与解锁机制
  • 不安全的传输信道
  • 登录凭证存储在不安全的位置

4.13.4.7. 找回密码

  • 重置任意用户密码
  • 密码重置后新密码在返回包中
  • Token验证逻辑在前端
  • X-Forwarded-Host处理不正确
  • 找回密码功能泄露用户敏感信息

4.13.4.8. 修改密码

  • 越权修改密码
  • 修改密码没有旧密码验证

4.13.4.9. 申诉

  • 身份伪造
  • 逻辑绕过

4.13.4.10. 更新

  • ORM更新操作不当可更新任意字段
  • 权限限制不当可以越权修改

4.13.4.11. 信息查询

  • 权限限制不当可以越权查询
  • 用户信息ID可以猜测导致遍历

4.13.5. 2FA

  • 重置密码后自动登录没有2FA
  • OAuth登录没有启用2FA
  • 2FA可爆破
  • 2FA有条件竞争
  • 修改返回值绕过
  • 激活链接没有启用2FA
  • 可通过CSRF禁用2FA

4.13.6. 验证码

  • 验证码可重用
  • 验证码可预测
  • 验证码强度不够
  • 验证码无时间限制或者失效时间长
  • 验证码无猜测次数限制
  • 验证码传递特殊的参数或不传递参数绕过
  • 验证码可从返回包中直接获取
  • 验证码不刷新或无效
  • 验证码数量有限
  • 验证码在数据包中返回
  • 修改Cookie绕过
  • 修改返回包绕过
  • 验证码在客户端生成或校验
  • 验证码可OCR或使用机器学习识别
  • 验证码用于手机短信/邮箱轰炸

4.13.7. Session

  • Session机制
  • Session猜测 / 爆破
  • Session伪造
  • Session泄漏
  • Session Fixation

4.13.8. 越权

  • 未授权访问
    • 静态文件
    • 通过特定url来防止被访问
  • 水平越权
    • 攻击者可以访问与他拥有相同权限的用户的资源
    • 权限类型不变,ID改变
  • 垂直越权
    • 低级别攻击者可以访问高级别用户的资源
    • 权限ID不变,类型改变
  • 交叉越权
    • 权限ID改变,类型改变

4.13.9. 随机数安全

  • 使用不安全的随机数发生器
  • 使用时间等易猜解的因素作为随机数种子

4.13.10. 其他

  • 用户/订单/优惠券等ID生成有规律,可枚举
  • 接口无权限、次数限制
  • 加密算法实现误用
  • 执行顺序
  • 敏感信息泄露