业务逻辑漏洞-负数

靶场来源:好靶场( 请一口气买102个汉堡3 )

漏洞复现

启动靶场环境,是一个点餐平台

要求一次购买102个汉堡可返回flag,优惠卷可免单。

花钱购买1张优惠卷进行测试,在个人中心发现可以退款优惠卷。

将退款数量改为-10000,返回退款数量必须大于0,说明前端做了校验,打开抓包工具拦截退款数据包将数量参数(refund_qty)改为-10000再发送,返回退款成功

此时优惠卷数量为10001,便可购买102个汉堡,返回flag

原理分析

核心问题:服务器端完全信任客户端传来的数据,未做任何校验。

业务逻辑被颠覆:

正常逻辑:个人优惠卷数量 = 原数量 -退货数量 (退货数量为正)
攻击逻辑:个人优惠卷数量  = 原数量 -退货数量(退货数量为负)= 原库存 +退货数量,导致个人优惠卷数量增加