声明:本文为博主原创文章,文章中所涉及的技术、思路和工具仅供学习交流使用,使用者必须遵守《网络安全法》等相关法律,严禁将本文知识用于任何未授权的非法活动,否则后果自行承担,与作者无关。未经作者授权,禁止任何形式的转载。
一、漏洞原理
这道题依然是要我们通过低价(不超过账号余额的100美元)购买一件1337美元的衣服,而且还给了我们一张优惠券NEWCUST5。一开始我在想:不会又是通过并发使用优惠券的接口吧,试了一下才知道,这张优惠券只能抵消5美元,所以要想通过这种方法购买成功,得并发成功几百次才行,这不现实,所以只能另想办法。
继续研究发现:在网站的底部,出现了一个“注册时事通讯”的输入框,只要输入一个邮箱地址完成注册,系统会赠送一张大额优惠券SIGNUP30。在下单页面,正常情况下,两张优惠券只能各使用一次,但是如果我们交替使用,它们却可以被使用多次,最终让我们可以低价购买指定的商品。
二、漏洞证明
1、打开购物网站首页,可以看到第一张优惠券NEWCUST5,如下图:
2、拉到购物网站底部,注册时事通讯,只需任意填入一个邮箱地址即可,如下图:
3、成功注册时事通讯后,浏览器弹框提示:我们又获得了另外一张优惠券SIGNUP30,如下图:
4、把题目指定的商品Lightweight "l33t" Leather Jacket添加到购物车,并进行支付。支付过程中我们交替使用两张优惠券,如下图:
5、最终成功下单,完成实验,如下图:
在拿到SIGNUP30这张优惠券后,我了解到它能抵扣400美元,所以我在想:能不能并发使用这张优惠券呢?只要能并发成功4次,也可以购买到指定商品了。于是,我尝试了下面两个步骤:
1、把优惠券兑换的接口发送至Turbo Intruder,然后修改优惠券名称,指定攻击的python脚本,如下图:
2、完成攻击后,查看攻击结果,如下图:
最终只有第一个请求正常使用了优惠券,其他请求都会提示优惠券已被使用,所以这个方法只能以失败告终。
三、漏洞思考
1、这道题在校验优惠券是否使用的时候,可能是检查上一张使用的优惠券和当前的优惠券是否相同,如果不同,那么可以使用当前的优惠券;如果相同,那么不可以使用当前的优惠券。但是,攻击者仅需要交替使用两张优惠券,漏洞就产生了。所以这也提示了我们:在检查优惠券是否已使用时,应该检查当前的优惠券是否已被使用,而不是检查当前优惠券和上一张使用的优惠券是否相同。