一、基本原理 1.商品的一般购买流程:选择商品和数量-选择支付方式及配送方式-生成订单编号-订单支付选择-完成支付 (支付宝、微信、银行卡等等) 2.常见的参…
一、基本原理
1.商品的一般购买流程:
选择商品和数量-选择支付方式及配送方式-生成订单编号-订单支付选择-完成支付
(支付宝、微信、银行卡等等)
2.常见的参数:
常见编号ID,购买价格,购买数量,支付方式,订单号,支付状态
3.常见修改方法:
替换支付,重复支付,最小额支付,负数支付,优惠券支付等
二、检测与危害
演示案例(一):
某商城系统商品支付购买数量、订单编号测试
账号和密码登入成功之后生成一个产品
设置商品的交易配置与配送管理中的物流配送
修改购买数量:点击商品出现立即购买和加入购物车,选择77件比较好辨认的数字
打开burpsite点击立即购买开始抓包,发现num=77猜测可能是购买的数量
再一次通过不同的数量(15)继续抓包证实num就是数量
尝试通过把num改成负数,成功可以0元支付
修改订单的编号:点击商品立即购买之后,一直forward放掉,再点击提交订单,找到数据包里面含有订单编号
将数据包发送到repeater进行保存一下,放出数据包,发下订单的编号
重新下一个订单
用刚刚的订单编号替换新的订单编号并返回数据包,发现订单改变,相当于用一千的钱买了价值两千的商品
这个漏洞的产生的主要原因是由于没有验证订单编号的机制
这里提一下修改支付接口:
类似存在这种有多种支付方法的订单,可以将其支付接口为一个不存在的接口,如果没做好不存在接口相关处理,那么此时就会支付成功(这边的实验环境不能实现)
演示案例二:
某系统商品订单数量、支付价格商品测试
登入账号之后
修改订单数量:回到首页随机点击一个产品
打开burpsite抓包,点击立即购买抓取数据包
分析数据包,发现“qty=1”猜测可能是数量故将qty的值改为2发送回去
发现成功修改商品的数量,猜测成功
修改订单价格:继续发现里面还有价格
修改价格为1并返回数据包发现订单改变
选择大米手机cms和大米CMS手机开发专版两种不同的订单(价格不同一个为5400一个为6000),复制抓取出来的数据包进行比较,发现id和name不同已经pic(图片不同不用理会)
尝试花5400买到大米CMS手机开发专版,抓包5000的大米手机cms立即购买的数据包,将id和name替换成6000的大米CMS手机开发专版发现花5400可以买的价值6000的大米CMS手机开发专版
在实际应用中,有些数据是不能随便更改的所以大多只能通过数据包的对比明确的哪些数据是可以更改的那些数据是不能变化的支付漏洞还有很多,但是很多不好演示具体的内容可以参考:https://www.secpulse.com/archives/67080.html
注:演示案例中使用软件的新版本大多已经修复
三、修复
1.进行交易时,做数据签名,对用户金额和订单签名。
2.判断服务端的计算金额是否为正数。
3.支付过程中加一个服务器生成的key,用户校验参数有没有被串改。
4.金额,以及数量,单价,快递费等支付时需要输入的一些数值,尽量的进行安全过滤与判断
5.提交订单时后台判断单价是否与数据库中相符
6.服务端效验客户端提交的参数,严格控制用户从GET、POST、Cookies等的提交方式去篡改数值,再一个支付的加密算法,尽可能在程序代码里,服务器端里做过,而不是直接读客户端的值
- 本文作者: ZHUZHU715
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/729
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!