逻辑漏洞之我见
签约漏洞
出现场景
自动续费、自动扣费签约,支付时跳转到支付宝等支付界面
通常出现在活动界面的会员优惠开通,支付后比正常购买优惠才算是漏洞。
实现步骤
1、A手机登陆账号A打开要测试的业务,点击自动续费,支付时停留在支付界面
2、B手机登陆账号A打开要测试的业务,点击自动续费,支付时停留在支付界面
3、A点击支付并进行签约,支付成功后在第三方APP中解除支付界面
4、B点击支付并进行签约,支付成功后在第三方APP中解除支付界面
全部支付成功后,系统就会开通相应的次数,由于提前打开了支付界面,所以金额都是享受到新用户首月优惠的金额。
实现的效果
例如:支付两个一元到账两个月会员。
会员升级漏洞
实现步骤
1、使用A手机登陆账号A,并开通会员,然后开通超级会员,进入到升级界面,进行补齐差价开通
2、使用B手机登陆账号A,并开通会员,然后开通超级会员,进入到升级界面,进行补齐差价开通
3、A手机进行支付,B手机进行支付,服务器会认为补齐了多个月份的超级会员,然后到账多次
绕过的原理和签约漏洞的原理差不多
订单关闭漏洞
实现步骤
1、使用优惠券创建一个订单,停留在支付界面,关闭订单,返还优惠券
2、使用优惠券再次创建订单,把第一次未支付的订单进行支付。
然后商品就从关闭重新进入到了代发货的阶段
实现效果
无限使用优惠券
拦截并发
比如在使用优惠券订单支付界面,进行拦截多次下单操作,有不同的随机数。
一起放行就会并发成功。
比如首单优惠,正常并发会失败,但是进行拦截多个新用户下单的请求后,再进行并发请求发送就会成功。
支付金额
分后面是厘
有些业务在支付时会忽略分以后的单位,这时候就导致了分以后的金额也可以生成订单
比如0.019=0.02,在支付时客户端给服务器传了0.019元的订单,使用第三方支付。而第三方支付通常最小的单位为分,这就会导致返回的金额会把后面的9屏蔽掉,只返回0.01(也有些直接四舍五入变成0.02)当支付完0.01后,第三方会通知服务器支付成功,而服务器那边生成的是0.01,可能由于这个软件的钱包最小单位也是分,四舍五入就变成了0.02
整数溢出
int的范围是-2147483648~2147483647
可以看作一个循环,超过最大值后就会从0开始计算。
2147483647=-2147483648
但是可能在支付里面没有负数所以从0开始计算
当支付金额为2147483649时,支付金额就变成了1
2147483649-2147483649=1
支付的时候可以直接把金额改成这个值
在测试商品的时候也可以让总价格为这个数
2147483648/物品单价+1=物品数量
## 验证码设计缺陷绕过
- 验证码刷新之后,而历史刷新的验证码还是可以继续使用
- 验证码使用过后不刷新,时效性不过期,可以一直复用
- 很多验证码的显示很简单,容易被机器识别
短信类验证码绕过
1、验证码过于简易&接口未限制:有些手机短信验证码都为 4-8位 纯数字的验证码,在接口没有任何限制的情况下是可以直接爆破的
2、验证码发送复用&时效性过长&接口未限制:位数验证码时效性为5分钟,但是在这里同一手机号发送的验证码都是一样的,所以可以在4分钟的时候重新发送一次验证码这样验证码就又有效了,因为验证码一直在被复用,所以可以爆破。
3、万能验证码:这是很多大企业的诟病,在未上线前为了方便测试加了888888、000000这样的万能验证码但是上线后没去删除测试的3内容导致被恶意利用。
原文链接 :https://yinwc.github.io/2020/05/12/%E9%80%BB%E8%BE%91%E6%BC%8F%E6%B4%9E/