(五)业务逻辑漏洞

什么是业务逻辑漏洞

业务逻辑漏洞是应用程序的设计和实现中的缺陷,攻击者可以利用这些缺陷引发意外行为。这可能使攻击者能够操纵合法功能来实现恶意目标。这些缺陷通常是由于无法预期可能发生的异常应用程序状态,因此无法安全处理它们所导致的。

在这种情况下,术语“业务逻辑”仅指定义应用程序运行方式的一组规则。由于这些规则并不总是与业务直接相关,因此相关的漏洞也称为“应用程序逻辑漏洞”或简称为“逻辑缺陷”。

逻辑缺陷通常对那些没有明确寻找它们的人来说是不可见的,因为它们通常不会在应用程序的正常使用中暴露出来。但是,攻击者可以通过开发人员从未想过的方式与应用程序进行交互来利用行为怪癖。

业务逻辑的主要目的之一是强制执行设计应用程序或功能时定义的规则和约束。从广义上讲,业务规则规定了在给定场景发生时应用程序应如何反应。这包括阻止用户执行会对业务产生负面影响或根本没有意义的事情。

逻辑上的缺陷可以使攻击者规避这些规则。例如,他们可能无需完成预期的购买工作流程即可完成交易。在其他情况下,对用户提供的数据的损坏或不存在的验证可能允许用户对交易关键值进行任意更改或提交无意义的输入。通过将意外值传递到服务器端逻辑中,攻击者可能会诱使应用程序执行不应执行的操作。

基于逻辑的漏洞可能非常多种多样,并且通常是应用程序及其特定功能所独有的。识别它们通常需要一定数量的人类知识,例如对业务领域的理解或攻击者在给定上下文中可能具有的目标。这使得它们很难使用自动漏洞扫描程序进行检测。因此,逻辑缺陷通常是漏洞赏金猎人和手动测试人员的理想目标。

业务逻辑漏洞如何产生

由于设计和开发团队对用户如何与应用程序交互做出错误的假设,因此经常会出现业务逻辑漏洞。这些错误的假设可能导致用户输入验证不足。例如,如果开发人员假设用户将仅通过Web浏览器传递数据,则应用程序可能完全依赖弱的客户端控件来验证输入。攻击者可以使用拦截代理轻松绕过这些漏洞。

最终,这意味着当攻击者偏离预期的用户行为时,应用程序将无法采取适当的措施来防止这种情况的发生,随后,也就无法安全地处理这种情况。

逻辑缺陷在过于复杂的系统中尤其常见,即使是开发团队本身也无法完全理解。为避免逻辑缺陷,开发人员需要从整体上理解应用程序。这包括了解如何以意想不到的方式组合不同的功能。使用大型代码库的开发人员可能对应用程序所有区域的工作方式没有深入的了解。在一个组件上工作的人可能会对另一组件的工作方式做出错误的假设,结果,无意中引入了严重的逻辑缺陷。如果开发人员未明确记录所做的任何假设,则此类漏洞很容易蔓延到应用程序中。

如何防止业务逻辑漏洞

简而言之,防止业务逻辑漏洞的关键是:

  • 确保开发人员和测试人员了解该应用程序服务的领域
  • 避免对用户行为或应用程序其他部分的行为做出隐式假设

您应该确定对服务器端状态所做的假设,并实施必要的逻辑以验证是否满足这些假设。这包括在继续操作之前确保任何输入的值都是合理的。

确保开发人员和测试人员都能够充分理解这些假设以及应用程序在不同情况下应如何反应也很重要。这可以帮助团队尽早发现逻辑缺陷。为此,开发团队应尽可能遵循以下最佳实践:

  • 维护所有事务和工作流的清晰的设计文档和数据流,并注意在每个阶段所做的任何假设。
  • 尽可能清晰地编写代码。如果很难理解应该发生什么,那么将很难发现任何逻辑缺陷。理想情况下,编写良好的代码不需要理解它的文档。在不可避免的复杂情况下,提供清晰的文档对于确保其他开发人员和测试人员了解正在做出的假设以及确切的预期行为至关重要。
  • 注意对使用每个组件的其他代码的任何引用。如果恶意方以不寻常的方式操纵它们,请考虑一下这些依赖关系的任何副作用。

由于许多逻辑缺陷具有相对独特的性质,因此很容易将它们作为一次错误归因于人为错误而继续进行下去。但是,正如我们已经证明的那样,这些缺陷通常是在构建应用程序的初始阶段中不良做法的结果。分析为什么首先存在逻辑缺陷,以及团队如何遗漏逻辑缺陷,可以帮助您发现流程中的弱点。通过进行较小的调整,您可以增加在源头消除或在开发过程中较早发现类似缺陷的可能性。

Examples

  • Excessive trust in client-side controls
    在这里插入图片描述
    我们需要使用100块的钱买下1337块钱的夹克,怎么做呢

抓包

POST /cart HTTP/1.1
Host: ac9a1fba1f283ca1804caeb8004300b0.web-security-academy.net
Connection: close
Content-Length: 49
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://ac9a1fba1f283ca1804caeb8004300b0.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac9a1fba1f283ca1804caeb8004300b0.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: session=imb7jZdy19khNNhrBpNri879vhj6Hf3V

productId=1&redir=PRODUCT&quantity=1&price=133700

可以看到productId=1&redir=PRODUCT&quantity=1&price=133700
商品id,商品价格等参数,在此我们修改商品价格参数
将包发送到repeat模块,先将价格修改为负数,提示价格不能为负数,则将价格修改为1,send,然后刷新购物车即可。
在这里插入图片描述
总结:该漏洞的成因是对用户输入的验证不充分或者说是对客户端的过分信任造成的,因此对参数的处理尽量放到后端去进行处理

High-level logic vulnerability

同样是使用100块的钱买下1337块钱的夹克,抓包

POST /cart HTTP/1.1
Host: ac971fd41fb8c32e809503d0002800ad.web-security-academy.net
Connection: close
Content-Length: 36
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://ac971fd41fb8c32e809503d0002800ad.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac971fd41fb8c32e809503d0002800ad.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: session=0KEU2C9jOMjz0Y4VgXIYwpbNTiLNt4iC

productId=1&redir=PRODUCT&quantity=1

发现价格参数已经被放到后端处理,则此处我们修改商品数量,将quantity修改为-1,
在这里插入图片描述
但支付的金额不能小于0,这怎么办呢?
我们可以选择添加其他商品,中和-1337而达到100块以内

在这里插入图片描述
据此可以看到,改价格已经在我们的支付范围内了,实验完成。
总结:该漏洞没有总分验证用户的输入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值