看了好多篇关于各位大佬总结的支付漏洞的技巧、思路等。现在想自己总结一下,也借鉴了一些大佬级人物总结的思路,各位勿喷,觉得可以就看一眼,觉得不好就忽略我这小白。仅用于个人学习使用。写这篇总结,案例什么的我就不放了,只用文字进行总结,避免造成各种不好的影响。
在常见购买商品过程下三大步: 选购商品–>确认订单信息(此处也会存在各种优惠券积分等功能)–>付款(支付宝/微信/银联/自带钱包)
在这三步之中,任何一步都可以进行修改金额参数来造成支付漏洞。抓包时要一个一个包,一个一个参数进行分析,不要漏过任何参数。找到代表金额的这个参数,进行修改为小单位金额放包尝试支付漏洞。这里注意的是支付宝微信银联等付款方式修改金额最好不要是负数,因为支付宝永远不会亏。自带的钱包功能可以尝试一下负值能不能引发。修改参数引发支付漏洞时,支付宝,微信,银联都需要尝试一下,毕竟支付接口,传输的参数,数据有可能不一样。
举例:
某商品平台----选购某商品立即购买----填写相关信息----立即付款(在此处抓包,发现金额参数可控,从而修改金额)----跳转到付款码界面(此时显示为更改的金额)----手机扫码付款
修改购买数量负值或者某特殊值引起的支付漏洞,也是最常见支付漏洞之一。修改数量负值,逻辑出错,金额也会变成负值,进行直接购买。
举例:
某商品平台----选购某商品立即购买(此处抓包将数量修改为负值)----填写相关信息(此刻发现只需要支付0元或者负值就可以)----立即付款(会直接显示付款成功,或有可能负值的金额退到商城钱包中)
这类功能大家应该很常见,比如优惠券、积分、金豆、券券等等。各种名字叫法也不同,说白了就是一种用户通过任务或者购物返利获得的一种在购买商品时可以抵扣金额的消费方式。
1:修改优惠劵金额
优惠券常见8折、5元等各种不同面值。在上述提到的购买商品三大步时,确认收获信息时可以使用这个功能,在这个步骤页面当中,可以选择相关优惠劵,然后直接修改金额大于或等于商品的价格就可以,或者直接修改其为负值进行尝试,最后进行支付,如果存在逻辑问题,那么问题就会产生,直接支付成功或生成订单。
补充:
有优惠券功能但是无优惠券时,可以寻找控制优惠券功能的参数进行控制开关。
优惠券可能存在优惠券复用漏洞,指一张优惠券可以同时并发复用多次。
某一些平台优惠券通过兑换码兑换,可利用此功能进行盗取优惠券。
隐藏类优惠券,有特殊情况是,会存在一类特殊的隐藏优惠券,性价比很高并且抵扣额度很大。
2:修改积分金额
积分功能,比如你消费多少或者做任务,返现一定的积分数量,这个积分可以在你付款的时候进行折扣其订单金额,如果这个没有做好积分金额的校验,那么当你在支付当中选择用积分为账户减一些金额的时候,可以抓包修改其积分金额为任意数或负金额,然后支付成功或生成订单。
补充:
有积分功能但是无积分时,可以寻找控制积分功能的参数进行控制开关。
积分可能存在积分复用漏洞,指一次性积分可以同时并发复用多次,创建多个订单。
消费积分生成订单,取消订单会退回积分时,可能会存在积分溢出漏洞。
3.各类奇葩抵扣方式
除去常见抵扣功能,剩余一些网站存在一些奇葩类抵扣,测试方法一样,修改参数大于等于小于负值测试即可。测试时要细心,包好好看,参数一个也不要放过。
这个问题我是没有见过,是总结前百度文章在某各大平台看到的。觉得也是一种很好的思路,虽然不曾挖到过,但是也列出来,谁能保证以后不会遇到呢。
这个问题是没有对支付状态的值跟实际订单支付状态进行校验,导致点击支付时抓包修改决定支付或未支付的参数为支付状态的值从而达到支付成功。
一类网站会有各种不同的支付接口,通过修改这些支付接口值,可能会直接支付成功。曾在某出售平台,最后支付时修改接口值,直接提示错误,但是返回查看订单时显示已付款。也是一种思路,有可能以后会遇到。
这种漏洞,其实理论上说不属于支付漏洞的类型。这类漏洞原理就是批量下单,导致某商品库存全被占用,为待支付状态。当其他用户购买此商品是会提示已售罄,无法购买。
举例:
某商品平台----选购某商品立即购买----填写相关信息----立即付款(此时跳转生成订单,不要付款,产生待付款订单,多次重放,消耗库存)----回到商品展示页发现商品售罄
一些网站在购买商品时,通过修改最大值最小值,比如999999999、-999999999、2147483647、-2147473648。修改金额优惠卷积分等,如果这里逻辑设计有问题,那么其支付金额会变为0。
很简单的越权问题,只是将越权和支付相结合,修改越权id参数实现跨用户给自己付款。
看起来其实差不多,但是也可以分为两种思路。
重复支付是指某些平台存在获取次数去体验使用产品7天或者15天不等。如果没有进行对订单多重提交的校验,那么就可导致无限制刷试用产品,比如,你试用时抓包,然后你每次试用都会产生一个订单号,然后利用刚抓到的数据包进行批量提交,你就可以看到每次提交的订单号不一样,然后这时你再看订单可以看到同一个商品的无数订单,但试用数只扣了你第一个试验时的,那么这时你申请批量退出试用,那么这么多订单,每退一个就会退相应的牌子数量到账户当中,这就构成了无限制刷得问题。
替换支付是指首先去产生两个订单,这两个订单商品是不一样的,其价格不一样,如果服务端没有做好这相关的验证,那么在支付的过程当中抓包,修改其订单值为另一个订单值,最后支付,这时就可以用订单一的支付价格买到订单而的商品。
这种漏洞其实很常见,不过有可能在测试的时候不注意,因为没事不会花钱去测试支付漏洞。
举例:
某游戏平台存在首充礼包,一个账户只能开通一次首充,这时会产生2重不同思路漏洞。
1.选择1元首充----选择支付宝扫码支付----弹出支付宝的付款码
这时,不要扫码付款,用此方法重放获取多个1元首充礼包支付宝支付界面。如果逻辑校验出错时,创建新订单时上一订单不会失效,依次同时付款,就会发现首充礼包不断到账。从而产生支付漏洞。
2.还有一种思路就是,某游戏平台的首充礼包里有1元6元两个挡位供用户选择,此时同时创建1元礼包和6元礼包2个付款码同时支付,如存在逻辑问题,两份礼包都会到账。
除此之外多线程并发还有各种类型支付漏洞,比如积分抵扣创建多次订单,同时拿到付款吗付款,优惠券也是一样,还有各种各样的骚操作。只要想法够带劲,就会发现带劲的漏洞。