当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-082487

漏洞标题:酷狗旗下5sing可篡改订单(存在刷钱风险)

相关厂商:酷狗

漏洞作者: oldjiang

提交时间:2014-11-08 18:21

修复时间:2014-12-23 18:22

公开时间:2014-12-23 18:22

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:5

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-08: 细节已通知厂商并且等待厂商处理中
2014-11-12: 厂商已经确认,细节仅向厂商公开
2014-11-22: 细节向核心白帽子及相关领域专家公开
2014-12-02: 细节向普通白帽子公开
2014-12-12: 细节向实习白帽子公开
2014-12-23: 细节向公众公开

简要描述:

酷狗旗下网站,5sing存在可随意篡改订单金额bug,如果酷狗开放了用户账户余额直接购买功能,则存在刷钱风险。原因嘛,很简单,没有严格校验客户端传入参数。

详细说明:

闲来无事,手上也没有乌云账号,正好去转一圈,找找bug,来乌云上坑个邀请码(虽然是个小bug,也算是用心检测了一番)。
具体操作步骤很简单,请向下看。
首先,打开5sing的音乐商城,随便点开一个商品。以下是我的测试地址:
http://5sing.kugou.com/shop/seller/serveinfo.html?sid=52d4eb0e8ead0e59380b2f9a
好了,右侧有个购买区域,我们在购买数量输入框处输入一个负值,就-1吧。

10.png


咦?自动变回来1,并且给了个友好的提示。
好吧,我来个不友好的举动,直接在控制台用javascript改变这个数量为-1。

jQuery("#Num").val(-1);


11.png


12.png


成功。
好了,我来试试提交,看看能不能提交。

13.png


哇,好高大上的提示!
没关系,他没用ajax在服务端验证,那我们就来把这个验证给去掉。
看代码:

$('.t_buy_b').click(function(){
var SI =$("#SI").val();
var LI =$("#LI").val();
var Q =$("#Num").val();
var url = '../buyer/order.html?SI='+SI+"&LI="+LI+"&Q="+Q;
alert("商城购买服务暂时关闭,敬请谅解");
//$(this).attr("href",url);
});


哇!5sing的程序员可真够懒的,一个alert阻拦了多少英雄汉?
咱不上当,既然提供给了我们一个提交订单的url地址,直接构造url呗。

http://5sing.kugou.com/shop/buyer/order.html?SI=52d4eb0e8ead0e59380b2f9a&LI=1401007216&Q=-1


成功进入购物车页面,一个alert是阻拦不了千千万万个我的!

14.png


好吧,坑爹的数量又变成了1,是不是要放弃呢?
再来瞅瞅。
把数量再修改为-1。

15.png


好吧,服你了,老规矩,继续在控制台改。
经过测试,控制台直接修改数量无效,不再浪费各位看官的时间里。
那么是不是代表测试结束了呢?
不!还有招儿。
看网页源码,发现原来这个表单提交另有玄机,上代码:

<form id="OrderForm" method="post">
<input type="hidden" id="SI" name="SI" value="52d4eb0e8ead0e59380b2f9a"/>
<input type="hidden" id="SLN" name="SLN" value="娱乐小样级"/>
<input type="hidden" id="AG" name="AG" value="0"/>
<input type="hidden" id="P" name="P" value="20"/>
<input type="hidden" id="PA" name="PA" value="20"/>
<input type="hidden" id="Q" name="Q" value="1"/>
<input type="hidden" id="F" name="F" value="0"/>
<input type="hidden" id="CO" name="CO" value=""/>
<input type="hidden" id="M" name="M" value=""/>
<input type="hidden" id="A" name="A" value=""/>
<input type="hidden" id="Z" name="Z" value=""/>
<input type="hidden" id="ME" name="ME" value=""/>
<input type="hidden" id="IA" name="IA" value=""/>
</form>


我勒个深深的去!感情所有参数全在这里,那之前的步骤岂不是在白费工夫?
好吧,我表示之前所有数据的修改基本上作废,真正的好戏就要来了。
别的不说,直接修改订单总金额为-20,提交看看。

18.png


页面没有任何变化,这是在意料之中的。

17.png


不管三七二十一,直接提交。

19.png


哦了,订单提交成功,一个应付总额为-20元旦订单就产生了(如果5sing提供余额付款,凭借5sing这喜欢偷懒的程序员做法,岂不是可以直接刷余额?刷完再删掉,这样不就神不知鬼不觉了么?)
目前,5sing只提供使用支付宝付款,那么-20元是没有办法通过支付宝付款的,否则支付宝岂不是也被人刷余额了么?强大的支付宝不会那么弱。
那能不能想办法支付订单呢?
好吧,办法很简单,提交订单的时候,需要支付金额改成0.01,那么你只要支付0.01元,就能购买价值几十上百的产品。
好了,测试到此结束,希望5sing的程序员可以勤快点,多写几行代码就能解决问题。
另,希望乌云可以提供一个宝贵的邀请码,作为路人甲的我想注册个账号刷点存在感。

漏洞证明:

以下是用户中心订单截图证明:

20.png


单价全部是20元,但是需要支付的金额却分别是-20,0.01和0。

修复方案:

修复也很简单,不要相信客户端提交的数据。
首先用户提交的产品数量必须是要大于0的,小于0应该作废,这样不至于产生负总额。
其次,订单总额也不应该由客户端提交,应该是在服务端根据提交的产品规格和产品数量计算出订单总额,这样就不容易被篡改。
好了,本次测试完美结束,虽然没有给5sing测出什么大的bug,但也算是用心测试了一下。
ps:本人是5sing的忠粉,每天都会在5sing听歌,希望5sing越做越好。

版权声明:转载请注明来源 oldjiang@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-11-12 10:17

厂商回复:

谢谢提交,我们正在安排人除理!

最新状态:

暂无