北京青果灵动科技有限公司自主研发的3D网页游戏引擎Fancy3D。测试中发现有参数可任意控制 最终实现远程命令执行。以下是分析过程:
先来看看游戏加载页面 这里选了一款苏州争渡科技有限公司开发游戏 三国武神
为保持卷面整洁,代码有删减
游戏主页面:http://s18.37wan.sgws.ate.cn/tapi/v1/otplat/login?platform=xxxxxx
先看看http://s18.37wan.sgws.ate.cn/proxy/getvjs/x52/18
这里面定义了一些初始化的配置 方便解说下面称这段配置为“配置一”
然后来看启动插件的部分logic1.2.js
其中的重要变量(意思是如果这个变量有问题,插件就不会启动或者无法执行下去)有
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) 内容如下:
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而已 求不吐槽
然后打包成TangRen-AutoPatch5.18.zip放到web目录下
然后新建一个php文件
其中最主要的是这段
然后修改一下游戏主页面 浏览器打开,然后什么都没有发生。。。
继续查看插件log发现TangRen_AutoPatch只会在游戏第一次安装的时候被下载和执行(或者版本更新?这里没研究下去)
需要游戏第一次加载 我们就再来看看游戏第一次加载的流程 其中第二步
2、插件启动后,在C:\Users\用户\fancy\下创建目录ZDSGGame
这个ZDSGGame是不是很眼熟 在游戏加载插件的时候 有个game参数的值就是这个
抱着试试看的态度 把这里的ZDSGGame改成了ZDSGGame1,重新用浏览器打开,等了大概5秒 刷的一下就弹出了熟悉的计算器
查看C:\Users\用户\fancy\ 果然生成了ZDSGGame1目录
后记:
市面上好多热门游戏包括暗黑之光 佛本是道 等等等等都在用这款插件 虽然具体流程略有不同,但是他们是共享的同一个网页插件
classid:b2e8d85e-c0c5-48df-8dbc-1359b339ae32
所以只要玩过任何一款这个插件的游戏,就可以被攻击,当然也包括安装了这个插件的开发者,标题不算夸大吧。