WolfCMS0.8.2中存在任意文件上传漏洞

优采云 发布时间: 2021-05-12 19:25

  WolfCMS0.8.2中存在任意文件上传漏洞

  一、狼cms简介

  Wolf cms是一个内容管理系统(cms),是根据GNU通用公共许可证v3发行的免费软件。 Wolf cms用PHP语言编写,是Frog cms的一个分支。在2010年Packet Publishing开放源代码项目奖中,“最有前途的开放源代码项目”类别达到了决赛。

  该软件的官方网站为:

  二、 Wolf cms 0. 8. 2具有任意文件上传漏洞2. 1 Wolf cms 0. 8. 2版本的漏洞概述

  早在2015年4月,Wolf cms被发现在其后端具有任意文件上传漏洞。攻击者可以利用此漏洞来上传恶意PHP文件。最终结果是系统由攻击者控制并且可以执行任意指令。该漏洞专门出现在文件管理功能中,该功能最初为管理员提供了一个界面来管理文件。

  在此版本的代码中,对允许上传的文件类型没有限制。因此,攻击者可以上载一个PHP Shell文件,该文件中的代码是恶意的,从而导致对系统的完全控制。

  2. 2 Wolf cms 0. 8. 2版本利用过程

  网站环境是在本地构建的,其攻击过程如下所示:

  在“文件”标签中,点击右下角的“上传文件”选项以执行上传操作

  

  选择要上传的单句木马文件,在这种情况下,其名称为“ ma 2. php”

  

  您可以看到此webshel​​l文件已成功上传到网站。

  

  系统还提供编辑文件的功能。在这里,我们可以检查刚刚上传的webshel​​l的代码。

  

  通过一个语句的*敏*感*词*木马客户端将该木马连接起来,发现它可以执行,从而证明攻击者可以利用此漏洞来完全控制它网站。

  

  2. 3漏洞源代码分析

  漏洞点出现在:/wolf/plugins/file_manager/FileManagerController.php

  从302行到339行是实现上传功能的upload()函数。

  

  首先,让我们一一解读代码的功能

  if (!AuthUser::hasPermission('file_manager_upload')) {

Flash::set('error', __('You do not have sufficient permissions to upload a file.'));

redirect(get_url('plugin/file_manager/browse/'));

}

  这是为了验证用户是否具有上传文件的权限,如果没有,则打印警告消息,然后将浏览器重定向到“ plugin / file_manager / browse /”位置。

  下一步是检查CSRF令牌,以防止CSRF攻击通过标签发生。

  if (isset($_POST['csrf_token']))

{

$csrf_token = $_POST['csrf_token'];

if (!SecureToken::validateToken($csrf_token, BASE_URL.'plugin/file_manager/upload')) {

Flash::set('error', __('Invalid CSRF token found!'));

redirect(get_url('plugin/file_manager/browse/'));

}

}

else {

Flash::set('error', __('No CSRF token found!'));

redirect(get_url('plugin/file_manager/browse/'));

}

  此代码首先检查在POST请求中是否设置了变量csrf_token。如果已设置,则将此值分配给$ csrf_token,然后通过SecureToken :: validateToken函数验证令牌的有效性,如果验证失败,则会打印警告消息,并将浏览器重定向到'plugin / file_manager / browse /'

  如果在POST请求中未传递令牌,则将执行类似的操作。下一步操作是关键:

  $data = $_POST['upload'];

$path = str_replace('..', '', $data['path']);

$overwrite = isset($data['overwrite']) ? true : false;

  路径中的切换字符“ ..”首先在此处删除。

  $filename = preg_replace('/ /', '_', $_FILES['upload_file']['name']);

$filename = preg_replace('/[^a-z0-9_\-\.]/i', '', $filename);

  然后删除文件名中的空格,仅保留从a到z的小写字母,数字0到9,下划线,破折号和点,并删除其余字符。

  if (isset($_FILES)) {

$file = $this->_upload_file($filename, FILES_DIR . '/' . $path . '/', $_FILES['upload_file']['tmp_name'], $overwrite);

if ($file === false)

Flash::set('error', __('File has not been uploaded!'));

}

  最后,执行upload_file函数以将文件上传到系统。在整个过程中,未对上传文件的类型进行安全检查,这导致攻击者上传了Webshel​​l。

  三、 Wolf cms 0. 8. 3. 1具有任何文件上传漏洞3. 1 Wolf cms 0. 8. 3. 1版本的概述中的漏洞

  最近,由于工作原因,我需要挖掘一些Web漏洞。因此,我想到了Wolf cms 0. 8. 2中的文件上传漏洞,该漏洞将在本文的第二部分中介绍。检查Wolf cms的当前版本,版本0. 8. 3. 1已发布。出于好奇,我检查了此文件上传漏洞是否已得到修补,结果是系统已对上传文件的文件扩展名进行了黑名单检查,但是众所周知,这是不安全的,可以绕开

  3. 2 Wolf cms 0. 8. 2版本利用过程

  网站环境是在本地构建的,其攻击过程如下所示:

  仍在“文件”选项卡右下角的“上传文件”处触发上传文件操作。

  

  这次,我们的客户端环境在ubuntu下,因为在这里我们可以将webshel​​l文件命名为“ ma 2. php”。 (请注意,文件名以点号结尾),并且在Windows系统下,不允许这样的命名。

  

  由于服务器是在Windows操作系统中构建的,因此在上传此文件后,webshel​​l文件名末尾的点将被自动删除。

  

  检查此文件的源代码,我们可以看到我们上传的确实是单句木马。

  

  仍然使用单句木马客户端进行连接,结果表明连接成功。事实证明,尽管采取了一些安全措施,仍可以绕过新版本。

  

  2. 3漏洞源代码分析

  漏洞点出现在:/wolf/plugins/file_manager/FileManagerController.php

  从第310行到第354行是实现上传功能的upload()函数

  

  我们可以看到大多数代码与先前的0. 8. 2版本一致,但在340至345行有所不同。

   $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

$ext_arr = array('php', 'php3', 'php4', 'inc');

if (in_array($ext, $ext_arr)) {

Flash::set('error', __('Not allowed to upload files with extension :ext', $ext));

redirect(get_url('plugin/file_manager/browse/'));

}

  这部分代码首先删除用户上传的文件的后缀,然后将其转换为小写。

  然后定义一个数组,其中定义了不允许上传的后缀。

  检查用户上传的文件的后缀是否在数组中,如果是,则打印警报消息,然后将浏览器重定向到路径“ plugin / file_manager / browse /”。

  我们上传的文件名为“ ma 2. php”。后缀名称不在黑名单数组中,因此允许上载。由于服务器是安装在Windows系统上的,最后一个点将被自动删除,因此这句话Trojan文件成为可执行文件。攻击成功了。

  四、摘要

  以上内容再次确认了众所周知的事实:文件后缀黑名单无法有效修复文件上传漏洞。一般来说,有效的防御方法是:

  1.将文件上传目录设置为不可执行;

  2.使用白名单而非黑名单来确定允许上传哪些类型的文件;

  3.使用随机数重写文件名或文件路径。

  4.如果上传图像文件,则可以执行第二次渲染。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线