由于缓存配置错误导致授权绕过
我正在测试一个电子商务网站。它有 2 个资产:
-
• target.com
:面向用户的门户,用户可以去那里购买物品。 -
• admin.target.com
:卖家的管理门户,他们可以在那里列出他们的物品,跟踪订单、客户信息等等。
我正在测试 IDOR 和访问控制。我通常使用 xia Yue 进行测试。如果权限较低的用户能够访问管理端点,xia Yue 将把它标记为"已绕过"。
通过将普通用户的 cookie 放入 xia Yue,我用它来检查普通用户是否可以访问管理端点。
测试期间的发现
在我的测试期间发生了一些不寻常的事情。每次我访问端点时:
https://admin.target.com/orders
正在进行以下 GraphQL 请求:
POST /graphql
HOST:admin.target.com
{"operationName":"GetOrders","variables":"shop_id":"X"},"query":"query X"}
响应包含我店铺的所有订单信息。这是预期的行为。然而奇怪的是,xia Yue 将端点标记为"绕过",这意味着即使是普通用户也能够发出此请求并访问我的商店的订单信息。
但是,当我将该请求发送到Repeater并尝试使用用户 cookie 发出请求时,出现了403错误。
调查过程
xia Yue 表示绕过,Repeater表示禁止。在我测试该程序的整个一周里,这种情况一直在发生。xia Yue 一直显示 GetOrders 端点为"已绕过",但是当我将请求发送到中继器并测试时,它给了我错误403 forbidden。
此时,我确信这不是 xia Yue 的问题,我只是忽略了一些东西。然后我明白了。xia Yue 和 Repeater 之间的唯一区别是时间间隔。虽然他们都有相同的 cookie/token。而我从Repeater发出请求则需要一些时间。
验证理论
为了验证我的理论:
-
1. 我使用管理员令牌向端点发出了请求 GetOrders。
POST /graphql
Host: admin.target.com
Auth: Bearer admin
{"operationName":"GetOrders","variables":"shop_id":"X"},"query":"query X"}
-
2. 然后立即使用用户令牌提出相同的请求。
POST /graphql
Host: admin.target.com
Auth: Bearer admin
{ "operationName":"GetOrders","variables":{ "shop_id":"X" },"query":"query X" }
令我惊讶的是,我能够获得该商店的所有订单信息,包括客户详细信息。
问题
服务器 GetOrders 在很短的 3/4 秒内缓存了响应。因此,如果攻击者在普通商店管理员使用其管理门户时同时发出请求,攻击者只需使用 shop_id 即可获取属于任何商店的所有订单/客户信息。
开发
我创建了一个简单的脚本,该脚本将全天向端点发出持续请求。每当管理员访问他们的门户时,订单/客户信息就会被缓存 3/4 秒的窗口,从而允许攻击者获取这些信息并绕过所有访问控制限制。
仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。
原文始发于微信公众号(柠檬赏金猎人):由于缓存配置错误导致授权绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论