过度信任客户端控制

前端过滤,可以很容易绕过,抓包修改即可
无法处理非常规输入应用程序可能被设计为接受某种数据类型的任意值,但从业务的角度来看,逻辑决定了这个值是否可以接受

  • 让我们以在线商店的简单示例为例。在订购产品时,用户通常会指定他们想要订购的数量。尽管理论上任何整数都是有效的输入,但业务逻辑可能会阻止用户订购比当前库存更多的单位
  • 例如,数字数据类型可能接受负值。根据相关功能,业务逻辑允许这样做可能没有意义。但是,如果应用程序没有执行足够的服务器端验证并拒绝此输入,则攻击者可能会传入负值并引发不需要的行为
  • 尝试在合法用户不太可能输入的范围内输入。这包括异常高或异常低的数字输入以及基于文本的字段的异常长字符串。您甚至可以尝试意外的数据类型。
    ## 对用户行为做出有缺陷的假设
    ### 受信任的用户并不总是值得信任 不幸的是,一些应用程序错误地假设,在最初通过了这些严格的控制之后,用户及其数据可以无限期地被信任。这可能导致从那时起对相同控制的执行相对宽松
    ### 用户不会总是提供强制输入

  • 一种误解是用户总是为必填字段提供值。浏览器可能会阻止普通用户在没有必要输入的情况下提交表单,但众所周知,攻击者可以在传输过程中篡改参数。这甚至扩展到完全删除参数。在同一个服务器端脚本中实现多个功能的情况下,这是一个特殊的问题。在这种情况下,特定参数的存在或不存在可以确定执行哪个代码。删除参数值可能允许攻击者访问本应无法访问的代码路径

  • 在探查逻辑缺陷时,应尝试依次删除每个参数,并观察其对响应的影响。您应该确保: 1.一次只删除一个参数,以确保到达所有相关的代码路径2.尝试删除参数的名称以及值。服务器通常以不同的方式处理这两种情况3.遵循多阶段流程直至完成。有时在一个步骤中篡改参数会对工作流程中的另一步骤产生影响。
  • 这适用于 URL 和POST参数,但也不要忘记检查 cookie
    ### 用户不会总是遵循预期的顺序 例如,许多实施双重身份验证 (2FA) 的网站要求用户在一个页面上登录,然后在另一个页面上输入验证码。假设用户将始终遵循此过程直到完成,因此不验证他们是否这样做,可能会允许攻击者完全绕过 2FA 步骤。
    ## 特定领域的缺陷 在线商店的折扣功能是寻找逻辑缺陷时的典型攻击面。对于攻击者来说,这可能是一个潜在的金矿,在应用折扣的方式中会出现各种基本的逻辑缺陷
  • 例如,考虑一个在线商店,它为超过 1000 美元的订单提供 10% 的折扣。如果业务逻辑在应用折扣后无法检查订单是否已更改,则这可能容易被滥用。在这种情况下,攻击者可以简单地将商品添加到他们的购物车中,直到它们达到 1000 美元的门槛,然后在下订单之前移除他们不想要的商品。然后,即使订单不再满足预期标准,他们也会收到折扣
  • 举个例子,你需要了解社交媒体,才能理解强迫大量用户关注你的好处。
    提供加密预言机
  • 当用户可控制的输入被加密并且生成的密文随后以某种方式提供给用户时,可能会发生危险的情况。这种输入有时被称为“加密预言机”。攻击者可以使用此输入使用正确的算法和非对称密钥加密任意数据。
  • 当应用程序中有其他用户可控的输入期望使用相同算法加密的数据时,这会变得很危险。在这种情况下,攻击者可能会使用加密预言机生成有效的加密输入,然后将其传递给其他敏感函数。