【juice-shop】★★★ Manipulate Basket:向他人购物车添加商品
0x01 任务简报
💡 提示 (Hints)1. 在将商品放入购物车时,请留意 HTTP 流量。
2. 向他人购物车添加更多相同商品的行为不构成解决方案。同样地,从他人购物车中窃取商品也不行。
3. 这项挑战需要比同类挑战更复杂的篡改手段。
0x02 实战:复现漏洞
📝 第一步:注册两个测试账户
|
|
🔍 第二步:抓取购物车请求
打开 Burp Suite,分别用两个账户各添加一次商品到购物车,捕获请求包。


📊 第三步:分析请求体
观察请求体内容,包含以下关键字段:
ProductId— 商品 IDBasketId— 购物车 IDquantity— 数量
当前状态:
- 用户 1 的 BasketId:
6 - 用户 2 的 BasketId:
7

💉 第四步:利用 JSON 参数污染
使用用户 2 的身份,将请求发送到 Repeater。直接修改 BasketId 为用户 1 的购物车 ID(6)会返回 401 错误。

关键技巧: 使用 JSON 参数污染,在请求体中重复添加 BasketId 字段:
|
|
当 JSON 解析器遇到重复的键时,通常会使用最后一个值(6),从而绕过购物车所有权验证。

发送请求,成功向用户 1 的购物车添加商品。
✅ 第五步:完成挑战
成功向他人购物车添加商品,挑战完成。
总结
这个挑战的核心在于 JSON 参数污染:
| 技巧 | 说明 |
|---|---|
| 重复参数 | 在 JSON 中重复定义同一个键 |
| 解析器行为 | 不同的 JSON 解析器处理重复键的方式不同 |
| 绕过验证 | 后端验证使用第一个值,但处理时使用最后一个值 |
| 第一时间没想起来有这个操作,看来还是经验太少了…… |
继续某位可爱大佬的教诲培养直觉(