学徒-非常规输入-高级逻辑漏洞
# 实验室:高级逻辑漏洞
# 题目
此实验室未充分验证用户输入。你可以利用其采购工作流程中的逻辑缺陷,以意外的价格购买商品。要解决实验室问题,请购买一件 “Lightweight l33t leather jacket” 。
你可以使用以下凭据登录到自己的帐户:wiener
:peter
- name: 实验室-学徒
desc: 高级逻辑漏洞 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-high-level
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 该实验室的 采购流程 中存在逻辑缺陷,能够以意外的价格购买商品。
- 利用逻辑缺陷,以意外的价格购买一件名为 “Lightweight l33t leather jacket” 的商品。
点击 “Access the lab” 进入实验室。

在首页中可以看到很多商品,其中有我们需要的 “Lightweight l33t leather jacket” 。
点击 “My account” 转到登录页面。

输入题目中提供的用户名和密码,登录相应账户。

登录之后,可以看到我们的账户中拥有 100 元,可以用于购买商品。

回到首页,点击商品下方的 “View details” 进入详情页。

启用浏览器代理,点击页面下方的 “Add to cart” 添加一个商品到购物车。

请求数据包中存在三个参数,其中的 quantity 为商品数量。

在 quantity 参数值的前方添加一个-
,使其变为负数,然后放行数据包。

添加成功,点击购物车图标进入购物页面。

刚刚添加的负数生效了,1 个商品 1337 元,-1 个商品 -1337 元。
点击 “Place order” 尝试提交订单。

程序返回错误信息,总价格不能小于 0 。
0元购/负元购 都不行,那怎么办呢?

那就 1 元购。
现在的价格为 -1337 元,添加其他商品,凑够 1338 元,1338-1337=1元。

随意选择一个其他商品,将其添加到购物车。

将价格变为正数,并保持在 100 元以下。
97.67×14-1337=30.38元,没毛病,点击 “Place order” 提交订单。

购买成功,实验完......诶?怎么没有完成?
看了看题目,又看了看订单,发现我购买的目标商品数量为 -1 个,可能购买的数量必须为 正数 ,不然不算完成。

那我们将 目标商品 和 其他商品 的数量调换一下就可以了。
回到目标商品的详情页,添加一个目标商品。

随后来到另一个商品的详情页,启用浏览器代理,然后添加商品。

这是原数据包,添加了 1 个商品数量。

将其修改为 -14 个,然后放行数据包。

进入购物车页面,发现价格为负数,负得太狠了。
点击其他商品的 “+” 将其数量增加一个,使总价格变为正数。

价格变为正数之后,确保总价格在我们的 购买力 之内,点击 “Place order” 提交订单。

购买成功,实验完成。

# 修复建议
支付漏洞2 - 负商品数量
- 在原来的基础上增加 正负数 校验,不允许添加负数量的商品。每当商品数量小于 1 时,直接从购物车移除该商品。
(查看账单)亲,您这个月卖出了 -999 件衣服,总收入 -99900 元,超过全球 0.00% 的用户,真是太棒了!请您再接再厉!