# 【juice-shop】★★★ Manipulate Basket：向他人购物车添加商品


# 【juice-shop】★★★ Manipulate Basket：向他人购物车添加商品

## 0x01 任务简报

<blockquote style="border-left: 5px solid #6f42c1; background-color: #f5f3ff; padding: 20px; margin: 1.5rem 0; color: #5521b5; line-height: 1.8; border-radius: 0 5px 5px 0;">
<div style="font-weight: bold; font-size: 1.1rem; margin-bottom: 10px; display: flex; align-items: center;">
<span style="margin-right: 8px;">💡</span> 提示 (Hints)
</div>
1. 在将商品放入购物车时，请留意 HTTP 流量。<br>
2. 向他人购物车添加更多相同商品的行为不构成解决方案。同样地，从他人购物车中窃取商品也不行。<br>
3. 这项挑战需要比同类挑战更复杂的篡改手段。
</blockquote>

---

## 0x02 实战：复现漏洞

### 📝 第一步：注册两个测试账户

```
账户 1：
1@1.com / 11111

账户 2：
2@2.com / 22222
```

### 🔍 第二步：抓取购物车请求

打开 Burp Suite，分别用两个账户各添加一次商品到购物车，捕获请求包。

![账户 1 请求](../../../../../../public/p/juice-shop-manipulate-basket向他人购物车添加商品/assets/Pastedimage20260409102425.png)

![账户 2 请求](../../../../../../public/p/juice-shop-manipulate-basket向他人购物车添加商品/assets/Pastedimage20260409102444.png)

### 📊 第三步：分析请求体

观察请求体内容，包含以下关键字段：

- `ProductId` — 商品 ID
- `BasketId` — 购物车 ID
- `quantity` — 数量

**当前状态：**
- 用户 1 的 BasketId：`6`
- 用户 2 的 BasketId：`7`

![请求体分析](../../../../../../public/p/juice-shop-manipulate-basket向他人购物车添加商品/assets/Pastedimage20260409102950.png)

### 💉 第四步：利用 JSON 参数污染

使用用户 2 的身份，将请求发送到 Repeater。直接修改 `BasketId` 为用户 1 的购物车 ID（6）会返回 401 错误。

![](../../../../../../public/p/juice-shop-manipulate-basket向他人购物车添加商品/assets/Pastedimage20260409102950.png)

**关键技巧：** 使用 JSON 参数污染，在请求体中**重复添加 BasketId 字段**：

```json
{
    "ProductId": 1,
    "BasketId": 7,
    "BasketId": 6,
    "quantity": 1
}
```

当 JSON 解析器遇到重复的键时，通常会使用**最后一个值**（`6`），从而绕过购物车所有权验证。

![参数污染请求](../../../../../../public/p/juice-shop-manipulate-basket向他人购物车添加商品/assets/Pastedimage20260409103234.png)

发送请求，成功向用户 1 的购物车添加商品。

### ✅ 第五步：完成挑战

成功向他人购物车添加商品，挑战完成。

---

## 总结

这个挑战的核心在于 **JSON 参数污染**：

| 技巧        | 说明                     |
| --------- | ---------------------- |
| **重复参数**  | 在 JSON 中重复定义同一个键       |
| **解析器行为** | 不同的 JSON 解析器处理重复键的方式不同 |
| **绕过验证**  | 后端验证使用第一个值，但处理时使用最后一个值 |
第一时间没想起来有这个操作，看来还是经验太少了……

继续某位可爱大佬的教诲培养直觉（

---

## 参考

- https://pwning.owasp-juice.shop/companion-guide/latest/appendix/solutions.html#_put_an_additional_product_into_another_users_shopping_basket

