0x01 尝试修改小数
某商城购买商品时,参数中有商品id(sku),数量(qty),赠品(subSku),等其他信息。首先尝试下遍历ID,可以用添加购物车的方式,来看有没有一些活动商品,或者直接购买赠品。然后尝试数量方面,修改成小数,比如0.01,看价格会不会变成1%的价格 。
{"cartItems":[{"sku":"B110005101","qty":0.01,"subSku":["5011100532","5431100063","5431100069"]}],"storeCode":"cn","invite":""}
会有什么影响?
购买优惠券或者商品时,修改数量或尝试添加数量参数。购买后会以1%的价格得到优惠券。
0x02 然后尝试修改负数
{"cartItems":[{"sku":"B110005101","qty":-1,"subSku":["5011100532","5431100063","5431100069"]}],"storeCode":"cn","invite":""}
会有什么影响
购买商品时,使用钱包支付,可能会导致余额溢出。
0x03 尝试正负数购买
添加参数尝试正负数,让他总值为正。
{"cartItems":[{"sku":"B110005101","qty":2,"subSku":["5011100532","5431100063","5431100069"]}],"cartItems":[{"sku":"B110005101","qty":-1,"subSku":["5011100532","5431100063","5431100069"]}],"storeCode":"cn","invite":""}
会有什么影响
由于商品支付校验了单个数量不能为负,使用此方法可以绕过这个逻辑。
0x04 尝试四舍五入
有些商品购买小数时比如1.51,支付2元,购买1.49时支付1元。就可以支付1.49只支付1元就可以到账1.49。
会有什么影响
服务器和客户端不同步导致的,客户端在支付时进行了四舍五入,服务器到账还是按实际输入的金额到账的。造成了支付和收益不同等。
0x05 超过最大值
超过最大值,金额大多数是有上限的,在超过上限后,例如99999999999999,会变成1E92这样的计算方式。具体在协议中可以看到,有些服务器就将1E92变成了1.92,在返回给你支付金额时只需支付1.92就能得到999999999999的商品。
会有什么影响
只需要少量金额购买到大量的产品,可以在服务器校验金额或者数量的最大值。确保不会超出预算。
0x06 替换订单号
适用于购买首单优惠产品,下单时会创建一个订单存在服务器,然后调用支付宝进行支付,可以选择不支付,继续创建订单,当服务器上存在了多个订单号后,一个一个支付支付时修改订单号,将提前创建好的订单都支付了。
会有什么影响
服务器校验时在不能重复购买特殊优惠做了校验,但是对于提前创建好的订单饼干没有校验,这里需要校验如果重复支付的话订单不到账,或者退还金额。
0x07 覆盖订单号
生成订单时替换订单号ID,达到将前一个订单覆盖的目的。比如前一个订单是6元充值,进入支付宝支付界面不支付,然后覆盖订单将500的档位覆盖掉6元的档位。这时在将支付宝支付掉。支付成功后,支付宝会通知服务器,服务器下发充值金额。
会有什么影响
服务器在收到通知后应该再次校验支付金额与订单的金额是否一致。如果不一致就不发放奖励。
0x08 签约漏洞
一般签约都会有优惠价格,还会有些首次签约的优惠 。
利用方法1:使用手机A进入签约界面,等待支付。
使用手机B进入签约界面,等待支付。
支付手机A—–解除签约。
支付手机B—–解除签约。
注意要解除后再签约,不然可能会提示已经签约了别的账号。
利用方法2:查看支付方式,将签约支付的方式修改为钱包支付或者其他方式。一般签约支付的商品ID都是独立的。用此方法依然可以达到普通方式使用签约价格来续费购买。
以上是最近挖到SRC漏洞总结出的一些经验。
最后说一句,一定要给客户说,给用户补单。
一秋网络科技首发
网友评论