在本节中,我们将学习设计和开发团队所犯的一些典型错误的示例,来查看是如何直接导致业务逻辑缺陷的,主要包含以下五个方面:
◆过度信任客户端控制
◆无法处理非常规输入
◆对用户行为做出有缺陷的假设
◆特定领域的缺陷
◆提供加密预言机
对用户行为做出有缺陷的假设
用户不会总是提供强制输入,有一种误解是用户总是为必填字段提供值,浏览器可能会阻止普通用户在没有必要输入的情况下提交表单。
但是攻击者可以在传输过程中篡改参数,甚至是完全删除参数。
在同一个服务器端脚本中实现多个功能的情况下,这是一个特殊的问题,在这种情况下,特定参数的存在或不存在可以确定执行哪个代码,删除参数值可能允许攻击者访问本应无法访问的代码路径。
在探查逻辑缺陷时,应尝试依次删除每个参数,并观察起对响应的影响:
●一次只删除一个参数,以确保到达所有相关的代码路径。
●尝试删除参数的名称及值,服务器通常会以不同的方式处理这两种情况。
●遵循多阶段流程直至完成,有时在一个步骤中篡改参数会对工作流程中的另一步骤产生影响。
这适用于URL和POST参数,但也不要忘记检查cookie。
场景试验-两个账户的弱隔离:
https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-weak-isolation-on-dual-use-endpoint
场景说明:
这个场景根据用户的输入对用户权限的级别做出了错误的假设。因此,可以利用其账户管理功能的逻辑来访问任意用户的账号。
试验目的:
要完成这个试验,需要访问管理员账户并删除carlos。
攻击过程:
①访问后用场景提供的账号进行登录,再访问"My account"是个改密的页面,在页面上改密后把这个请求发送给Repeater,把当前密码的条件删掉,发现还是可以改密成功
②修改下这个请求,把username改成administrator,再发送请求
③最后用administrator登录后删除用户carlos即可完成试验。
试验小结:
这个试验其实虽然是非常扯,现实中根本不可能碰到到,但是很好的说明了在查找逻辑缺陷时对参数调整的过程。
用户不会总是遵循预期的顺序
另外,许多事务依赖于由一系列步骤组成的预定义工作流,Web界面通常会引导用户完成此过程,每次完成当前流程时,都会将他们带到工作流程的下一步。
但是,攻击者不一定会遵守这个预期的顺序,未能考虑到这种可能性可能会导致容易被利用的逻辑缺陷。
例如,许多实施双因素身份验证的网站要求用户在一个页面上登录,然后在另一个页面上输入验证码,假设用户始终遵循此过程直到完成,如果不验证他们是否这样做,可能会允许攻击者完全绕过双因素的步骤。
可以参照以前介绍过的试验场景-双因素简单旁路:
即使在相同的工作流程或功能中,对事件顺序做出假设也会导致存在问题。通过各种攻击工具,一旦攻击者看到请求,他们就可以随意重放,并强制浏览他们想要与服务器执行交互的任何顺序。这允许他们在应用程序处于意外状态时完成不同的操作。
要识别这些类型的缺陷,我们可以强制以非预期的顺序提交请求进行浏览。
例如,我们可以跳过某些步骤、多次访问单个步骤、返回到之前的步骤等等。
注意,如何访问不同的步骤,尽管通常只向特定URL提交GET或POST请求,但有时可以通过向URL提交不同的参数集来进行访问。
跟所有逻辑缺陷一样,尝试确定开发人员所做的假设以及攻击面所在的位置,就可以寻找违反这些假设的方法。
但是要注意,这种测试通常会导致异常,因为预期变量具有null或未初始化的值,如果部分定义或不一致可能会导致应用程序错误,在这种情况下,务必密接注意遇到的任何错误消息或调试信息。这些可能是信息泄露的宝贵来源,可以帮助我们微调攻击并了解有关后端行为的关键细节。
场景试验-工作流程验证不足:
https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation
场景说明:
这个场景对采购工作流程中的事件顺序做出了错误的假设。
试验目的:
要完成这个试验,需要利用这个漏洞购买一件"Lightweight133t leather jacket"。
攻击过程:
①登录页面后购买一件可以正常买得起的商品,查看Proxy history可以发现,当在购买支付时,会重定向另一个确认页面,把这个请求发送到Repeater
②把jacket加到购物车里面,然后利用Repeater重新发送上面这个请求,即可购买成功完成试验。
试验小结:
这个场景暴露出来的逻辑缺陷,其实就是只通过页面来控制流程,一旦攻击者跳过中间某些关键流程,或是利用关键流程进行重放,则缺陷漏洞就会被利用。
场景试验-通过有缺陷的状态机绕过身份验证:
https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-flawed-state-machine
场景说明:
这个场景对登录过程中的事件顺序做出了错误的假设。
试验目的:
要完成这个试验,需要利用此漏洞绕过试验的身份验证,访问管理界面,并删除carlos。
攻击过程:
①登录后尝试访问/admin,发现只有administrator有权限可以进入,退出账号,然后将BurpSuite改为阻断模式。
②再重新登录,输入账号密码的请求转发后,把后一个GET /role-selector请求丢弃掉,相当于跳过这一步角色确认的流程
③跳过后再重新通过浏览器访问主页,发现默认已经是管理员权限了
④进入/admin删除carlos,即可完成本试验
试验小结:
这个试验场景演示了在跳过一些正常流程后,如果存在逻辑缺陷的话可能会存在一些异常授权的情况,所以在进行渗透攻击时,可以尝试跳过一些流程步骤。
命令注入攻击(上)
目录遍历攻击(上)
身份验证漏洞-多因素身份验证中的漏洞(上)
身份验证漏洞-基于密码的登录漏洞(上)
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-HTTP请求隧道(上)
HTTP高级请求走私-CRLF的利用(上)
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞-密码重置投毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):业务逻辑漏洞-利用示例(三)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论