thinkCMF 文件包含漏洞
首先我们在去介绍这个漏洞之前,我们需要先了解一下这个漏洞thinkCMF。
thinkCMF它是一个开源的,支持swoole的开源内容管理框架,让web开发更快,节约时间,这个框架的话是基于thinkphp的二次开发框架,所以说在我们国内还是有大部分的网站使用到这样的一个框架的。
那么我们可以想象一下如果这个框架出现了一个漏洞,那它的影响范围是不是也同样很广呢?那接下来我们今天进一步的去探索一下thinkCMF的文件包含漏洞。
接下来我们就直接去复现一下这个漏洞。
1、构造a参数的fetch方法,实现任意文件写入,把php代码写入文件。
?a=fetch&templateFile=public/index&prefix="&content=<php>file_put_contents('test.php','<?php phpinfo();?>')</php>
这个时候我先在本地搭建了这样的一个框架,如果说你们也想去复现一下这个漏洞,同样也是可以在本地搭建这个框架的。
这边我们所搭建的版本是ThinkCMFX 2.2.3的版本,然后我们去构造一个这样的漏洞攻击代码。
当我们构造完成以后,回车就会发现网页是空白的,那这个时候我们可以想到test.php文件,我们去访问它一下。
当我们访问test.php文件的时候,就会通过刚才的代码将phpinof写入到test.php里面去。
我们可以看到这个文件在当前根目录下方生成了这样的一个文件。
这个就是任意文件的一个写入。
那么说恶意的用户,把样的一个代码写成一些一句话代码,那么就能够将一句话的木马写入到对方的网站路径下面去,在通过webshell管理工具去进行连接。
我们再去看一下任意内容的包含漏洞。
通过构造a参数的display方法,在去选择模板文件内容为README.md,那么通过这样的一个payload我们就能够去把README.md的这样一个文件给包含出来。
?a=display&templateFile=README.md
然后我们去到浏览器界面输入README.md回车,就可以发现我们能够成功的包含出这样的一个代码。
为了给大家演示得更加明显一点,我们确定能够包含,那么小狸这里手动在网站的根路径下面去创建了一个test.txt文件。
那这个文件我们去看一下它的内容。
我们通过这样一个文件包含漏洞去包含了一个.txt的文件,那么我们也是能够成功的去解析这里面的phpinof的代码的。那么这个也是一个包含。
那这个漏洞怎么去修复呢?
漏洞修复将HomebaseController.class.php和AdminbaseController.class.php类中display和fetch函数修饰符改为protected。
这个的原因就是因为它的这两个方法是公用的,我们需要把它改为私用的,这样才可以不被前端的用户去任意的利用。