当前位置:首页 > 漏洞预警 > 正文

ThinkCMF框架任意内容包含漏洞预警

发布时间:2019-10-23 16:32:03,来源:中国信息通信研究院

      一、基本情况

ThinkCMF框架上存在任意内容包含漏洞。攻击者可在无任何权限情况下,通过构造特定的请求包在远程服务器上执行任意代码。

      二、攻击原理

ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。

根据index.php中的配置,它的项目路径为application,打开 Portal 下的 Controller 目录,选择一个控制类文件。

image.png 

发现他的父类为Common\Controller\HomebaseController。

在HomeBaseController中加入如下测试代码:

image.png 

ThinkPHP是一套基于MVC的应用程序框架,被分成三个核心部件:模型(M)、视图(V)、控制器(C)。由于添加的代码在控制器中,根据ThinkPHP框架约定可以通过a参数来指定对应的函数名,但是该函数的修饰符必须为Public, 而添加的代码正好符合该条件。

可以通过如下URL进行访问,并且可以添加GET参数arg1传递给函数: http://127.0.0.1/cmfx-master/?a=test_public&arg1=run%20success

image.png 

HomeBaseController类中有一些访问权限为public的函数。

image.png 

重点关注display函数,看描述就是可以自定义加载模版,通过$this->parseTemplate 函数根据约定确定模版路径,如果不符合原先的约定将会从当前目录开始匹配。

然后调用THinkphp Controller 函数的display方法:

image.png 

再往下就是调用Think View的fetch方法,这里的TMPL_ENGINE_TYPE 为Think,最终模版内容解析在ParseTemplateBehavior中完成。

如下调用即可加载任意文件: http://127.0.0.1:81/cmfx-master/?a=display&templateFile=README.md

image.png 

要利用该方法shell,还需要配合前台的一个上传功能,通过包含自己上传的文件来shell。

      三、影响范围

受影响的版本:

1)ThinkCMF X1.6.0

2) ThinkCMF X2.1.0

3) ThinkCMF X2.2.0

4) ThinkCMF X2.2.1

5) ThinkCMF X2.2.2

      四、处置建议

目前官方尚未发布该漏洞补丁,建议对受影响版本采取临时措施:

将 HomebaseController.class.php 和 AdminbaseController.class.php 类中 display 和 fetch 函数的修饰符改为 protected。

      五、参考链接

1) https://blog.riskivy.com/thinkcmf-%E6%A1%86%E6%9E%B6%E4%B8%8A%E7%9A%84%E4%BB%BB%E6%84%8F%E5%86%85%E5%AE%B9%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/?from=timeline&isappinstalled=0