学徒-客户端控件-过度信任
# 实验室:过度信任客户端控件
# 题目
此实验室未充分验证用户输入。你可以利用其采购工作流程中的逻辑缺陷,以意外的价格购买商品。要解决实验室问题,请购买一件 “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-excessive-trust-in-client-side-controls
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” 添加一个商品到购物车。

点击购物车图标,进入当前账户的购物车页面。

点击 “Place order” 提交订单,尝试购买目标商品。

程序返回错误信息,账户余额不足 购买失败。

# 购买的缺陷
回到商品详情页面,启用浏览器代理,然后添加一个商品。

在 添加商品 的请求数据包中出现了 4 个参数,其中有一个很显眼的参数price=133700
,这是商品的价格,也就是 1337.00 元。

在价格处添加一个小数点,从而减少购买价格。

程序返回错误信息 “无效的参数” ,可能是 price 参数不能出现特殊字符。

再次添加商品,这次不新增字符,而是删除后面的两个 0 。

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

商品的价格从原来的 1337.00 变为了 13.37 。

如果将请求数据包中的价格改为 1 ,则最终的购买价格为 0.01 。
说明参数 price 的数据类型为整数,程序在接收 price 参数之后,会在整数的基础上添加两位的小数点 并以此作为最终价格。
将价格控制在 100 元以内,然后点击 “Place order” 提交订单。

商品购买成功,实验完成。

# 修复建议
支付漏洞1 - 过度信任客户端
- 旧:客户端发送 price 参数,服务端根据 price 设置价格。
- 去除 price(价格),改为使用 productId(产品id)。
- 新:客户端发送 productId 参数,服务端根据 productId 查找商品,如果找到对应商品,则设置相应价格。
“价格” 需要服务端内置,客户端提供的价格不可信。
- A:老板,一件衣服多少钱?
- B:一件 1337 块钱。
- A:我说 0.01 就 0.01 ,一分钱都不能多!