- A+
这是一个关于“如何动脑筋让自己的星巴克礼品卡显示为无限金额,然后从此过上终身免费喝咖啡日子“的故事。
黑客@homakov 最近购买了三张面值5美元的星巴克礼品卡。
starbucks.com有个人账号体系,可以添加礼品卡、查询余额,以及不同卡之间转账。
对于涉及金钱等有限资源的网站,有个漏洞很常见,叫做“条件竞争”(国内也有称呼竞态条件)。它的特征是:因为数据库的处理速度跟不上程序的请求速度,如果网站的防护做的不够,发起的多个购买或转账请求可以同时生效。
@homakov 研究发现,资金从卡1转到卡2是有状态的。第一个请求,卡1转钱到卡2并保存金额值;第二个请求,确认交易并清除会话。
会话的存在,对hack造成了些困难。不过这种保护还是可以绕过的:使用同一个账号,在两个不同浏览器上同时进行转账操作(cookie不同)。
“条件竞争”的难处在于,许多开发人员都会限制每个ip/账号/动作的请求数,以预防网络延迟和非正常请求造成错误。@homakov 尝试了好些次,最后终于成功绕过限制,将卡1的钱两次转移到卡2。现在的三张卡变成0美元、15美元、5美元。
他走进附近的星巴克店,买了16.7美元东西。
后来,@homakov 给自己信用卡充了10美元,并将这个漏洞反馈给了星巴克官方。
后记:类似的情况在国内也有,比如乌云上有位童鞋因网络不好,向自如网多点了几次退款按钮,然后生成了两单退款申请,并收到了两笔款项。
参考:
WooYun: 自如网自如空间设计不当存在账户余额多倍提现漏洞(有入账证明)
乌云知识库:并发请求导致的业务处理安全风险及解决方案
DigitalOcean的条件竞争漏洞
来源:sakurity.com
1#疯狗 | 2015-05-22 14:53
“如何动脑筋让自己的星巴克礼品卡显示为无限金额,然后从此过上终身免费喝咖啡日子”——大众喜闻乐见啊
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫