漏洞介绍

逻辑漏洞是指由于错误的业务逻辑或缺乏正确的验证和控制,导致应用程序中存在漏洞或不安全的行为。大多数程序员在开发时,仅考虑了正常流程,对非预期流程没有合适的处置措施。

如:未对购物车中商品数量进行合理验证,攻击者可通过修改请求,将商品数量设置为负数或超过库存,绕过限购逻辑,实现购买更多商品的目的。

[!NOTE]

越权并不属于逻辑漏洞,虽然越权行为可能导致一些逻辑上的不一致或矛盾,但它更多地涉及权力、权限和行为规范的问题,而不是纯粹的逻辑错误。

漏洞分类

[!NOTE]

分类只写了几个大类,其实还有很多,因为篇幅和思路问题暂时无法全部写出,但总的来说大多数逻辑漏洞的问题都在于业务逻辑错误数据一致性问题

交易类

  • 金额篡改(如:直接将购买金额从100修改为0.01,就可能1分钱购买100元的商品)
  • 条件竞争(如:100块同时支付2个100块的订单,购买2件商品)
  • 正数溢出(如:系统支持最大整数为2**64,我们购买2**64+1件商品,那么就可能只需要支付1件商品的价格)
  • 正负对冲(如:存在2件商品,A商品99元/件,B商品100元/件,那么尝试购买-1件A和1件B,就只需要支付1元)
  • ...

验证码类

  • 短信轰炸(如:可对单一用户无限制发送手机验证码)
  • 验证码可暴破(如:手机验证码长度4位,5分钟有效,且可无限制尝试,那么可以枚举0001-9999的所有数字来破解验证码值)
  • 验证码可复用(如:登录接口存在验证码,但只要不刷新验证码,就可以无限制使用)
  • 验证码回显(如:发送验证码后查看数据包,发现直接将验证码返回,一般常见于开发平台)
  • ...

登录类

  • 用户名枚举(如:某登录功能,输入admin,提示密码错误,输入abcde,提示用户不存在,那么就可以尝试枚举系统中存在的用户)
  • 退出功能未生效(如:用户点击注销后,旧的身份凭证信息如cookiejwt等仍然生效,可以访问系统的业务)
  • 任意用户密码重置(如:找回密码功能处,给账号A发送短信验证码,但账号B也可以通过这个短信验证码进行密码重置,从而导致了漏洞)
  • 弱鉴权漏洞(如:通过cookie中的用户名鉴权,或者使用用户名的base64编码、hash值等进行鉴权,很容易被攻击者分析出来)
  • 账户覆盖(如:注册时系统要求输入唯一的用户名,如果输入的用户名存在,那么可能会直接覆盖原来的用户,从而导致接管原用户权限)
  • 恶意锁死(如:登录功能处,如果同一账号登录失败5次,那么将锁定账号30分钟,攻击者可通过枚举用户名的方式批量锁定账户,同时也可以每隔30分钟锁定一次账户,造成业务层面的拒绝服务)
  • ...

流程类

  • 多流程绕过(如:修改密码时,输入正确的验证码后,前段通过服务器返回的状态码(code:200)确认邮箱是否验证成功,如果成功就进入下一步,那么我们输入错误的验证码,再尝试将返回包中的code值改为200,从而欺骗前端,跳过该流程到下一步)
  • ...

漏洞危害和修复建议

逻辑漏洞分类太多,大多需要根据实际业务情况进行分析危害和修复建议。

如金额篡改,危害就是可以低价购买商品;修复建议就是在提交订单时,只传入商品ID,根据商品ID从数据库中拿到价格进行计算,最后再返回支付金额即可。

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-06-08 14:01:45

results matching ""

    No results matching ""