当前位置: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

厂商回复:

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

最新状态:

暂无