Ywc

逻辑漏洞之我见

Word count: 1.2k / Reading time: 4 min
2020/05/12 Share

签约漏洞

出现场景

自动续费、自动扣费签约,支付时跳转到支付宝等支付界面
通常出现在活动界面的会员优惠开通,支付后比正常购买优惠才算是漏洞。

实现步骤

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. 验证码刷新之后,而历史刷新的验证码还是可以继续使用
  2. 验证码使用过后不刷新,时效性不过期,可以一直复用
  3. 很多验证码的显示很简单,容易被机器识别

短信类验证码绕过

1、验证码过于简易&接口未限制:有些手机短信验证码都为 4-8位 纯数字的验证码,在接口没有任何限制的情况下是可以直接爆破的

2、验证码发送复用&时效性过长&接口未限制:位数验证码时效性为5分钟,但是在这里同一手机号发送的验证码都是一样的,所以可以在4分钟的时候重新发送一次验证码这样验证码就又有效了,因为验证码一直在被复用,所以可以爆破。

3、万能验证码:这是很多大企业的诟病,在未上线前为了方便测试加了888888、000000这样的万能验证码但是上线后没去删除测试的3内容导致被恶意利用。

CATALOG
  1. 1. 签约漏洞
    1. 1.1. 出现场景
    2. 1.2. 实现步骤
    3. 1.3. 实现的效果
  2. 2. 会员升级漏洞
    1. 2.1. 实现步骤
  3. 3. 订单关闭漏洞
    1. 3.1. 实现步骤
    2. 3.2. 实现效果
  4. 4. 拦截并发
  5. 5. 支付金额
    1. 5.1. 分后面是厘
    2. 5.2. 整数溢出
  6. 6. ## 验证码设计缺陷绕过
  7. 7. 短信类验证码绕过