WEB攻防-购买支付逻辑漏洞&数据篡改&请求重放&接口替换

目录

一、前置知识点

二、示例展示及漏洞重要知识点讲解

<篡改价格>

<篡改数量1>

<篡改订单信息>

<篡改订单信息>

<篡改数量2>

<篡改优惠卷>

三、如何挖掘如何防范


一、前置知识点

1. 商品购买 —— 数量 & 价格 & 编号等。
2.支付模式——状态& 接口 & 负数等。
3.折扣处理——优惠券& 积分 & 重放等。


1. 熟悉常见支付流程:
        选择商品和数量- 选择支付及配送方式 - 生成订单编号 - 订单支付选择 - 完成支付。
2. 熟悉那些数据篡改:
        商品编号 ID ,购买价格,购买数量,支付方式,订单号,支付状态等。
3. 熟悉那些修改方式:
        替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等。

二、示例展示及漏洞重要知识点讲解

1.打开商品网站。

2.随便打开一个商品,可以看到数量为1时,价格为6000。

3. 点击购买后抓取数据包。

4.可以从数据包内看到数量和价格。

5.当我们直接放包后会跳转到支付页面上去。

<篡改价格>

6.我们将其价格改成1,然后放包。

7.可以看到在网站的支付页面内,需要付款的金额也变成了1。

8.造成这种现象的原因是网站对其价格不是固定死的,而是有数据包决定的。

<篡改数量1>

9.我们将数量更改为-1,然后放包。

10.可以看到金额变成了-6000。

<篡改订单信息>

11.我们选择第一个商品点击购买然后抓取数据包。

12.选择第二个商品点击购买后抓取数据包。

13.将数据包的信息粘贴到记事本里。

14.我们只需要修改一些特定的值,就可以使用一个商品的价格去购买另一件商品。

15.将下面的两部分进行复制,然后粘贴到数据包内的对应位置。

16.更改数据包之后放包。

17.可以看到支付页面内成功更改了要购买的商品。

<篡改订单信息>

18.我们点击付款方式的时候会有许多选项。

19.我们这里先选择支付宝付款,点击提交订单,抓取数据包。 

20.将这个数据包放出后,网站就会拉取支付宝相关的付款链接,形成下面的数据包。 

21.如果将支付的接口信息进行更改,改到你自己的名下,那么在付款的时候就会将资金付到你自己的名下,并且网站也会认定你是付款成功。这种操作类似我们前面文章讲到的重定向。
22.到这里你可能会想,这购买商品也太危险了把?
23.其实也并不是这样,一方面网站可能不会认可你自己的支付接口,另一方面,如果你将接口修改了,那么网站会不会接收你的回调信息呢。此时虽然你付款成功了,但是网站并没有检测到收款,就相当于无用功。

<篡改数量2>

23. 来到下一个购物网站。

24.这里有一个1000元的商品。

25.点击立即购买后抓取数据包。

26.观察数据包可以看到购买数量在数据包的最后一行,但是购买金额在数据包内并没有展示出来,直接对篡改价格进行了一定的防范。

27.既然数据包内没有价格信息,只有数量信息,那么我们就来尝试对其数量进行修改。

28.将其修改为“0.0001”后放包。 29.可以看到最终总金额变成了下面的样式。

<篡改优惠卷>

30.我们来到一个商品页内,可以看到这个商品存在优惠卷。

31.领取后购买商品可以看到可以使用优惠卷进行购买。

32.选择一张之后金额就变成了900元。

33.选择好支付方式后点击立即支付。

34.完成支付后再次购买商品,可以看到优惠卷从刚开始的3张变成了2张。

35.我们再次进行模拟购买,将三张全部用完。

36.用完之后再次购买的时候发现就没有使用优惠卷的选项了。

37.这时我们再来领取一张。

38.之后再次购买的时候发现又存在了一张优惠卷。

39.我们选择优惠卷购买,点击立即购买后抓取数据包。

40.我们将其参数粘贴出来。

41.我们再领取一张优惠卷,然后不使用优惠卷进行购买,点击立即购买后抓取数据包。

42.我们再次将参数值粘贴出来,与刚刚粘贴出来的进行对比。

43.我们可以明显的看到没使用优惠卷的数据包与使用了优惠卷的数据包的内容差别如下。

44.总结一下就是这个值,如果使用优惠卷这个值就是106,不使用优惠卷这个值就是0。

45.优惠卷问题:

  • 重复领取——优惠卷一个用户只能领取并再在一次购买中使用。
  • 重复使用——重放数据包

 46.我们姑且认为优惠卷是有编号的,当我们再次使用优惠卷进行购买的时候,发现数据包内下面的编码变成了107。

47.这就很清楚了,优惠卷的值是不断向上增长的。

48.我们来尝试不领取优惠卷,只修改上面的值来进行尝试。

49.此时我们再次将购买的数据包给抓取到,然后将其值修改成为更大的数字,这里将其修改成了“200”。

50.放包后我们可以看到价格果然变成了900。

51.使用这个漏洞的前提是我们找到其优惠卷的规律,那么有的人就会想到这样一个问题:一般优惠卷都是只能领取一次,那我怎样来像上面这样多次领取来寻找规律呢?

52.这种问题很好解决——再注册一个账号密码来领取。

53.到这里又会产生一个问题,一个优惠卷的编码我们能不能重复进行使用呢?

54.这里我们再抓一个购买时的数据包,将优惠卷编号的位置更改为我们刚刚使用过的107来进行尝试。

55.放包后可以看到其金额依然是900,优惠卷编号依然可以使用。 

56. 到这里你可能会想,这购买商品的优惠卷也太危险了把?

57.其实也并没有太微信,简单进行过滤一下就可以消除这个漏洞。
58.可以设置当优惠卷一旦被人领取,就将其进行绑定,不让别人进行使用;同时也可以设置当优惠卷一旦被使用了,就将其删除掉,当再次使用的时候,就提示优惠卷不存在了;也可以将优惠劵的信息写到数据包不可见的信息里,并且将其进行加密。
59.接下来我们尝试将订单编号进行修改。
60.抓取1000元订单的存在订单编号的数据包。

61.我们将其粘贴出来。

62.抓取付款页面的编号,将其也复制出来。 

63.我们再创建一个100000的订单,用同样的方法将其信息复制出来。

65.接下来我们来到订单中心查看。

66.我们尝试使用订单覆盖,使用1000的订单将100000的订单给覆盖掉。

67.点击1000订单的去支付。

 68.抓取到下面的数据包。

69.放掉两个数据包后就看到了存在订单编号的数据包。

70.将其篡改为刚刚复制出来的100000订单的订单信息。

71.放包后可以看到订单金额相应的变成了100000。

72.同理,如果我们反过来,将100000的订单编号信息修改成1000的,金额会不会也相应的发生变化呢?

73.答案是可以的。

74.那么就可能会出现下面的三种可能性。

75.解决这种安全问题的方法其实也很简单,我们可以在数据包内看到数据包内是存在id值的,通过这个值就可以对订单商品以及订单金额进行控制,我们后面更改订单编号就是没有用的,需要同时对二者进行更改才可行,如果二者不对应就会出现逻辑错误,弹出错误页面。

 

76.我们再使用一个案例来进行验证。

77.找到一个商品购买后抓取数据包。

 78.将数据包进行上面的更改后放包,就可以看到出现了下面离谱的订单。

79.这个网站就明显是存在问题的。 

80.但是还好后面还存在审核。

三、如何挖掘如何防范

1.如果想要挖掘这种漏洞,首先要判断目标网站有没有购买的功能。
2.如何防范:
  • 金额以数据库定义为准
  • 购买数量限制为正整数
  • 优惠券固定使用后删除
  • 订单生成后检测对应值
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ranzi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值