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

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

缺陷编号:wooyun-2013-034071

漏洞标题:腾讯3366游戏分数篡改

相关厂商:腾讯

漏洞作者: mos

提交时间:2013-08-11 10:21

修复时间:2013-09-25 10:22

公开时间:2013-09-25 10:22

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

危害等级:中

自评Rank:5

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-08-11: 细节已通知厂商并且等待厂商处理中
2013-08-15: 厂商已经确认,细节仅向厂商公开
2013-08-25: 细节向核心白帽子及相关领域专家公开
2013-09-04: 细节向普通白帽子公开
2013-09-14: 细节向实习白帽子公开
2013-09-25: 细节向公众公开

简要描述:

腾讯3366小游戏分数任意篡改

详细说明:

3366中任意一个可以和好友PK分数的游戏,如 飞天忍者猫 http://www.3366.com/flash/1000168.shtml
开始游戏,结束时Tamper数据包:

QQ截图20130811012058.jpg


POST数据为:
qzversion=0&platform=1&key=a6eextv1mcf8cdbad982946c560ab2dd29a918e2233be95da272d01116&submit=true&uin=XXXXXX&score=230&act=set&pid=1000168
从内存中提取swf(或直接下载)分析源代码,该swf会加载远端api的一个swf(如果没改名的话叫openservice_as3_v3.swf),再拿回来反编译分析代码。发现有这么一个函数:
private function getFinalKey(param1:String, param2:Number) : String
{
if (param1)
{
}
if (param1.length == 48)
{
}
if (param2 > 999999999)
{
return null;
}
var _loc_3:* = param1;
param1 = param1.substr(42, 6);
var _loc_4:* = parseInt(param1, 36);
var _loc_5:* = _loc_4.toString(35);
var _loc_6:* = _loc_5.length;
var _loc_7:* = parseInt(param1.substr((param1.length - 1)), 36) % _loc_6;
var _loc_8:* = param2.toString(36);
var _loc_9:* = _loc_5.substr(0, _loc_7);
var _loc_10:* = _loc_5.substr(_loc_7);
var _loc_11:* = _loc_7 + 10;
var _loc_12:* = _loc_11 + _loc_8.length;
var _loc_13:* = MD5.hash(_loc_11.toString() + param2.toString() + _loc_12.toString());
var _loc_14:* = _loc_13.substring(6, 10);
var _loc_15:* = [_loc_11.toString(36), _loc_9, _loc_8, _loc_10, _loc_14, _loc_12.toString(36), _loc_3].join("");
return _loc_15;
}// end function
这个函数用于生成最后KEY,该函数有2个输入值,一个是得的分数(我们修改这个),然后是一个关键KEY(param1)。
观察:
var _loc_3:* = param1;

var _loc_15:* = [_loc_11.toString(36), _loc_9, _loc_8, _loc_10, _loc_14, _loc_12.toString(36), _loc_3].join("");
可以知道这个关键KEY 位于 最终 KEY 的末尾。 通过多次抓包发现 最终KEY的后48位都是不变的。 所以我们试着取 关键KEY 为 最终KEY后48位。
然后我们把关键KEY和想要修改的分数作为参数 执行 这个函数中的算法(可把as代码改成js代码直接在浏览器console里跑)得到最终KEY。然后 tamper 提交。 修改成功。

漏洞证明:

QQ截图20130811012057.jpg


混个乌云号。。刚才提交的忘选获取邀请码了。。

修复方案:

1. 完善认证算法,不要把关键KEY完整放在最终KEY之内。
2. 关键代码源码混淆。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2013-08-15 14:15

厂商回复:

感谢反馈,我们正在跟进处理中

最新状态:

暂无


漏洞评价:

评论

  1. 2013-08-11 11:44 | lucky ( 普通白帽子 | Rank:409 漏洞数:84 | 三人行必有我师焉########################...)

    mark

  2. 2013-08-11 13:58 | 多多关照 ( 普通白帽子 | Rank:271 漏洞数:23 | 大牛们,多多关照!)

    这个,基本可以修一次发一次。

  3. 2013-08-11 14:16 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @多多关照 。。。flash加密,有毛办法,我之前发过。 WooYun: 百度小游戏一键刷分

  4. 2013-08-11 23:36 | mos ( 路人 | Rank:5 漏洞数:1 )

    @px1624 的确关键代码做混淆的话就不太好办了。 不混淆的话真不太好修复。。

  5. 2013-09-25 13:36 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    给你看个更有趣的。哈哈,逆推的。。 WooYun: 腾讯3366小游戏站算法被破解