您现在的位置是:网站首页> 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 目录,选择一个控制类文件。
发现他的父类为Common\Controller\HomebaseController。
在HomeBaseController中加入如下测试代码:
由于添加的代码在控制器中,根据ThinkPHP框架约定可以通过a参数来指定对应的函数名,但是该函数的修饰符必须为Public, 而添加的代码正好符合该条件。
可以通过如下URL进行访问,并且可以添加GET参数arg1传递给函数。
http://127.0.0.1/cmfx-master/?a=test_public&arg1=run%20success
HomeBaseController类中有一些访问权限为public的函数,
重点关注display函数.看描述就是可以自定义加载模版,通过$this->parseTemplate 函数根据约定确定模版路径,如果不符合原先的约定将会从当前目录开始匹配。
然后调用THinkphp Controller 函数的display方法
再往下就是调用Think View的fetch方法,这里的TMPL_ENGINE_TYPE 为Think, 最终模版内容解析在ParseTemplateBehavior中完成
如下调用即可加载任意文件
http://127.0.0.1:81/cmfx-master/?a=display&templateFile=README.md
修复建议:
1)将 HomebaseController.class.php 和 AdminbaseController.class.php 类中 display 和 fetch 函数的修饰符改为 protected。
2):在底层think_filter方法添加bind过滤。具体为
文件地址:simplewind\Core\Mode\Api\functions.php
以上修复,只能暂时解决问题,如要从根本上解决问题,还是要将框架升级到最新版本。
很赞哦! (1357)
上一篇:PHP打印输出函数汇总