Monstra CMS 3.0.4 - Authenticated Arbitrary File Upload
1. 简介
Monstra是一个现代化的轻量级内容管理系统。它易于安装,升级和使用。
2. 环境搭建
官方网站:https://monstra.org/下载最新版3.0.4
推荐使用wamp快速搭建环境,刚开始用phpstudy搭建,步骤都一样不知道为什么总是不成功,使用wamp一次就成功了。
-
解压源代码到wamp/www目录
-
在wamp/www中.htaccess中添加如下代码,用来支持解析.php7扩展的php文件
addType application/x-httpd-php .php7
一定要添加这行代码,不然无法将.php7解析成php只能解析成文本,如图支持解析php7不支持解析php5,因为没有把.php5也加入解析成php程序。
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.'); }
}
上传的文件会先校验扩展名是否在 f o r b i d d e n t y p e s 中 , forbidden_types中, forbiddentypes中,forbidden_types是没有php7的。由此可知该系统使用黑名单机制来控制上传文件格式的,由于黑名单中缺少php7,并且管理员配置不当:允许php7格式解析成php代码时,可以触发该漏洞。
4. 漏洞复现
管理员登录系统,选择上传,上传php7扩展的php木马,然后访问木马即可造成远程代码执行。
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. 坑点
-
默认配置是无法正常解析.php7文件为php,然后不管怎么搭建环境都无法复现,所以特别影响进度,后来才想到.htacces文件可以控制这个php解析类型,所以通过在.htaccess中添加如下代码addType application/x-httpd-php .php7,用来支持解析.php7扩展的php文件。
-
PHPstudy无法搭建此环境。就算在.htaccess中添加如下代码addType application/x-httpd-php .php7也无法成功复现,没找到原因,又耽误了很长时间,记录一下,避免踩坑。