Monstra CMS 3.0.4 - Authenticated Arbitrary File Upload

Monstra CMS 3.0.4 - Authenticated Arbitrary File Upload

1. 简介

Monstra是一个现代化的轻量级内容管理系统。它易于安装,升级和使用。

2. 环境搭建

官方网站:https://monstra.org/下载最新版3.0.4

推荐使用wamp快速搭建环境,刚开始用phpstudy搭建,步骤都一样不知道为什么总是不成功,使用wamp一次就成功了。

  1. 解压源代码到wamp/www目录

  2. 在wamp/www中.htaccess中添加如下代码,用来支持解析.php7扩展的php文件

addType application/x-httpd-php .php7

一定要添加这行代码,不然无法将.php7解析成php只能解析成文本,如图支持解析php7不支持解析php5,因为没有把.php5也加入解析成php程序。

3

4

3. 漏洞成因分析

在\plugins\box\filesmanager\filesmanager.admin.php文件找到关键代码

        // Upload file
        // -------------------------------------
        if (Request::post('upload_file')) {

            if (Security::check(Request::post('csrf'))) {

                $error = false;
                if ($_FILES['file']) {
                    if ( ! in_array(File::ext($_FILES['file']['name']), $forbidden_types)) {
                        $filepath = $files_path.Security::safeName(basename($_FILES['file']['name'], File::ext($_FILES['file']['name'])), null, false).'.'.File::ext($_FILES['file']['name']);
                        $uploaded = move_uploaded_file($_FILES['file']['tmp_name'], $filepath);
                        if ($uploaded !== false && is_file($filepath)) {
                            Notification::set('success', __('File was uploaded', 'filesmanager'));
                        } else {
                            $error = 'File was not uploaded';
                        }
                    } else {
                        $error = 'Forbidden file type';
                    }
                } else {
                    $error = 'File was not uploaded';
                }

                if ($error) {
                    Notification::set('error', __($error, 'filesmanager'));
                }

                if (Request::post('dragndrop')) {
                    Request::shutdown();
                } else {
                    Request::redirect($site_url.'/admin/index.php?id=filesmanager&path='.$path);
                }
            } else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
        }

5

上传的文件会先校验扩展名是否在 f o r b i d d e n t y p e s 中 , forbidden_types中, forbiddentypesforbidden_types是没有php7的。由此可知该系统使用黑名单机制来控制上传文件格式的,由于黑名单中缺少php7,并且管理员配置不当:允许php7格式解析成php代码时,可以触发该漏洞。

4. 漏洞复现

管理员登录系统,选择上传,上传php7扩展的php木马,然后访问木马即可造成远程代码执行。

6

7

8

5. 影响版本

Monstra CMS <= 3.0.4,最新版为3.0.4

6.防御方法

暂无版本可升级,管理员可在\plugins\box\filesmanager\filesmanager.admin.php文件中$forbidden_types变量自行添加php7,用来禁止上传php7。

7. fofa搜索语法

body=“Monstra.org”

8. 坑点

  1. 默认配置是无法正常解析.php7文件为php,然后不管怎么搭建环境都无法复现,所以特别影响进度,后来才想到.htacces文件可以控制这个php解析类型,所以通过在.htaccess中添加如下代码addType application/x-httpd-php .php7,用来支持解析.php7扩展的php文件。

  2. PHPstudy无法搭建此环境。就算在.htaccess中添加如下代码addType application/x-httpd-php .php7也无法成功复现,没找到原因,又耽误了很长时间,记录一下,避免踩坑。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordar123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值