您现在的位置是:网站首页> PHP PHP

关于thinkcmf2.2.3版本漏洞攻击的修复办法

三石2019-11-27 11:16:00【PHP】1357人已围观

摘要

近期,基于thinkcmf x2.2.3开源程序二次开发的一个网站频繁收到攻击,被恶意上传木马,首页被篡改,经过分析,是由ThinkCMF框架上的任意内容包含漏洞造成的。

影响版本覆盖:Thinkcmf x1.6.0 - Thinkcmf x2.2.3 。

漏洞危害:远程攻击者在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码。

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

企业微信截图_20191127110522.png

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

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

www15717269452605.png

由于添加的代码在控制器中,根据ThinkPHP框架约定可以通过a参数来指定对应的函数名,但是该函数的修饰符必须为Public, 而添加的代码正好符合该条件。

可以通过如下URL进行访问,并且可以添加GET参数arg1传递给函数。


http://127.0.0.1/cmfx-master/?a=test_public&arg1=run%20success

15717262906506.png

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

263238531.png


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

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

企业微信截图_20191127111235.png


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

如下调用即可加载任意文件

http://127.0.0.1:81/cmfx-master/?a=display&templateFile=README.md

7263812267.png



修复建议:

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


    2):在底层think_filter方法添加bind过滤。具体为

 文件地址:simplewind\Core\Mode\Api\functions.php

bind过滤

  


以上修复,只能暂时解决问题,如要从根本上解决问题,还是要将框架升级到最新版本。

很赞哦! (1357)

文章评论

本栏推荐