业务逻辑漏洞-利用示例(四)

admin 2022年7月9日12:24:20评论95 views字数 3794阅读12分38秒阅读模式

在本节中,我们将学习设计和开发团队所犯的一些典型错误的示例,来查看是如何直接导致业务逻辑缺陷的,主要包含以下五个方面:

◆过度信任客户端控制

◆无法处理非常规输入

◆对用户行为做出有缺陷的假设

◆特定领域的缺陷

◆提供加密预言机

 


特定领域的缺陷

在许多情况下,会遇到特定业务领域或站点的逻辑缺陷。

在线商店的折扣功能是寻找逻辑缺陷时的典型攻击面,对于攻击者来说,这可能是一个潜在的金矿,在应用折扣的方式中会出现各种基本的逻辑缺陷。

例如,一个在线商店,它为超过1000元的订单提供10%的折扣,如果业务逻辑在应用折扣后无法检查订单是否已更改,那么这可能容易被滥用。在这种情况下,攻击者可以简单地把商品添加到他们的购物车中,直到它们达到1000元的门槛,然后在下订单之前移除他们不想要的商品。这样,即使订单不再满足预期标准,他们也会收到折扣。

应该特别注意那种标准价格调整或其他敏感值的情况,尝试了解应用程序使用什么算法来进行这些调整,以及在什么时候进行这些调整。这通常涉及操纵应用程序,使其在调整时处于不符合开发人员预期的原始标准状态。

要识别这些漏洞,需要仔细考虑攻击者可能拥有的目标,并尝试使用提供的功能找到实现此目标的不同方法。

这可能需要一定程度的特定领域知识,以便了解在给定的条件中哪些是有利的。

举个简单的例子,我们需要了解社交媒体,才能理解大量用户关注你的好处。

如果没有该领域的这种知识,可能会忽略危险行为,因为根本没有意识到其潜在的连锁反应。同样,我们可能很难将这些点连接起来,并注意到两个功能如何以有害的方式组合在一起。

 

场景试验-业务规则执行有缺陷:

https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-flawed-enforcement-of-business-rules

场景说明:

这个场景在购买工作流程中存在逻辑缺陷。

试验目的:

要完成这个试验,需要利用漏洞购买一件"Lightweight 133t leather jacket"

攻击过程:

登录后可以发现新用户有一张优惠券,代码:

NEWCUST5

业务逻辑漏洞-利用示例(四)

 

在页面底部,可以发现输入email订阅后会另外再给你张优惠券,代码:

SIGNUP30

业务逻辑漏洞-利用示例(四)

 

然后把那件商品添加到购物车里面,在折扣那一栏中分别填入两张优惠券的代码,尝试连续写入同一张优惠券代码会提示失败

业务逻辑漏洞-利用示例(四)

 

但当我们尝试轮流填入这两张优惠券代码时,发现可以反复使用,直至总金额到0,点击支付,完成本次试验

业务逻辑漏洞-利用示例(四)


场景试验-无限金钱逻辑缺陷:

https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-infinite-money

场景说明:

这个场景在购买工作流程中存在逻辑缺陷。

试验目的:

要完成这个试验,需要利用漏洞购买一件"Lightweight 133t leather jacket"

攻击过程:

登录后先从最底部获取折扣券,然后我们用这个折扣券只需要花7元就可以额购买一张10元的礼品券

业务逻辑漏洞-利用示例(四)



购买礼品券后会有个劵码,在"My account"里面输入劵码会看到账户会增加10元,相当于每经过一轮这样的操作账户就可以多3

业务逻辑漏洞-利用示例(四)

业务逻辑漏洞-利用示例(四)

业务逻辑漏洞-利用示例(四)


通过分析历史抓包,可以看出来主要分为5个步骤:

◆POST /cart:把礼品卡添加到购物车;

◆POST /cart/coupon:添加折扣券;

◆POST /cart/checkout:购买确认;

◆GET /cart/order-confirmation?order-confirmed=true:获取礼品卡的券码;

◆POST /gift-card:提交礼品券码兑换成购物款;

 

接下来想办法自动化这个过程

◆打开"Project options">"Sessions"标签

◆在"Session handling rules"面板中,点击"Add"

◆在打开的面板中选择"Scope"标签,选择"Include all URLs"

业务逻辑漏洞-利用示例(四)

 

◆选择"Details"标签,增加一个宏

业务逻辑漏洞-利用示例(四)

◆在弹出的对话框中选择"Add"

业务逻辑漏洞-利用示例(四)

 

下面就是具体宏的制作了:

◆先按照第三部分中把五个步骤的请求包都选上,随后点击"OK"

业务逻辑漏洞-利用示例(四) 

◆选择获取礼品卡码的这个请求,点击"Configure item",在弹出的对话框中再点击"Add"

业务逻辑漏洞-利用示例(四)


◆取个名字,找到响应包中的礼品码,复选下,然后点击"OK"两次

业务逻辑漏洞-利用示例(四)


◆选择兑换礼品码的请求进行配置

业务逻辑漏洞-利用示例(四)


◆在变量抓取的位置,对"gift-card"变量选择从上一个响应包中抓取,点击"OK"

业务逻辑漏洞-利用示例(四)


◆进行下测试,确保可以获取到礼品码并正常使用,多次点击"OK"

 

接着配置自动攻击脚本:

◆把GET /my-account请求发送给Intruder,在"Positions"标签中清空所有变量

业务逻辑漏洞-利用示例(四)


◆在"Payloads"标签中,选择类型选择"Null",攻击次数设置为300

业务逻辑漏洞-利用示例(四)


◆在"Resource Pool"标签中设置最大每次1个请求,随后进行攻击

业务逻辑漏洞-利用示例(四)


可以发现,账户的金额在不断增大,当攻击结束后,用上打折券,就可以购买所需的商品了,完成本次试验。

 

试验小结:

通过这个试验,主要是了解如何自动配置宏,从响应包中抓取所需的数据放入到后一个请求包中去使用。

 


提供加密预言机

当用户的输入被加密后生成密文,随后以某种方式提供给用户时,可能会发生危险情况。

这种输入有时被称为“加密预言机”,攻击者可以利用此输入通过正确的算法和非对称密钥加密任意数据,然后将其传递给其他敏感函数。

如果站点上有另一个提供反向功能的用户可控输入,那么问题会变得更加复杂,攻击者能够解密其他数据以识别预期的结构,这就为他们创建恶意数据节省了工作。

加密预言机的严重性取决于哪些功能也使用与预言机相同的算法。

 

场景试验-通过加密预言机绕过身份验证:

https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-encryption-oracle

场景说明:

这个场景包含一个逻辑缺陷,该缺陷将加密预言机暴露给用户。

试验目的:

要完成这个试验,需要利用漏洞访问管理面板并删除carlos

攻击过程:

访问后登录时勾选"Stay logged in",登录后尝试提交一篇评论,"email adress"这里输入个不规范的后提交,可以看到反馈页面会有条错误信息

业务逻辑漏洞-利用示例(四)

业务逻辑漏洞-利用示例(四)


观察下两个包,把这两个包都发送到Repeater

◆POST /post/comment

◆GET /post?postID=X

业务逻辑漏洞-利用示例(四)


业务逻辑漏洞-利用示例(四)

可以发现前一个请求返回的红色框部分在第二个包中被放在cookie头中发送出去了,而红色框部分就是对填入的email地址采用了一种加密算法。我们可以简称第一个请求为“加密请求”,第二个请求为“解密请求”

 

我们把"stay-logged-in"后面的加密参数替换掉“解密请求”红框部分,然后发送得到响应包

业务逻辑漏洞-利用示例(四)

可以看到,这个维持登录的cookie也是采用了类似的加密算法,在把密文还原后,可以发现是"账号:时间串"组成的,把时间串复制出来。

 

接下来我们要想办法获取"administrator:时间串"加密后的密文,用这个密文来作为维持登录的cookie

◆首先在“加密请求”中输入明文

业务逻辑漏洞-利用示例(四)

 

◆将获得密文替换入“解密请求”来确认下实际的明文内容,可以发现,在我们原来的明文前面,系统自动增加了"Invalid email address: "这字符串一起加密

业务逻辑漏洞-利用示例(四)

 

要想办法要剥离这个字符串,数了下这个字符串是23位的(注意最后有个空格)

◆首先我们把前面获取到的密文发送到Decoder中

业务逻辑漏洞-利用示例(四)

 

◆在Decoder中,分别用URLBase64解码下编码格式

业务逻辑漏洞-利用示例(四)

 

◆删除掉最后编码的前23

业务逻辑漏洞-利用示例(四)

 

◆再将剩余的编码反过来重新编译,并将最终结果复制出来

业务逻辑漏洞-利用示例(四)


◆将复制出来编码替换到“解密请求”,但从响应包中发现有错误,要求密文是16的倍数

业务逻辑漏洞-利用示例(四)


错误的原因是我们删除了23位字符,导致剩下的密文不是16的倍数了,那我们给明文再凑9位字符上去,这样删除32位密文字符正好是16的倍数,那么剩下的也就是16的倍数了

◆重新构造下账户明文,添加9个字符

业务逻辑漏洞-利用示例(四)


◆接下来继续按照第五大步里面,发送到Decoder进行解码后删除32位字符,再编码,将最终得到的字符串复制到“解密请求”中,可以得到正确的维持登录cookie所用的明文

业务逻辑漏洞-利用示例(四)


Burp Proxy改成阻断模式,访问主页时把维持cookie替换成那个密文,发现有管理员登录权限了,能够在页面上看到管理面板,进入管理面板后删除carlos用户即可完成本试验

业务逻辑漏洞-利用示例(四)

业务逻辑漏洞-利用示例(四)

 

试验小结:

这个试验稍微有点复杂,主要利用的就是整个应用系统采用了同一套加密算法,并且可以同时获取到明文和密码让攻击者可以进行比对的漏洞。


业务逻辑漏洞-利用示例(四)


命令注入攻击(上)
目录遍历攻击(上)
身份验证漏洞-多因素身份验证中的漏洞(上)
身份验证漏洞-基于密码的登录漏洞(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-HTTP请求隧道(上)
HTTP高级请求走私-CRLF的利用(上
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞-密码重置投毒
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):业务逻辑漏洞-利用示例(四)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月9日12:24:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   业务逻辑漏洞-利用示例(四)http://cn-sec.com/archives/1168019.html

发表评论

匿名网友 填写信息