某国外cms代码审计
字数 1342 2025-08-07 08:22:09

RITEcms 文件上传与任意文件删除漏洞分析

漏洞概述

本文详细分析RITEcms系统中存在的两个安全漏洞:

  1. 不安全文件上传漏洞
  2. 任意文件删除漏洞

这两个漏洞存在于最新版本的RITEcms中,攻击者可以利用默认凭证进入后台,进而上传恶意文件或删除系统重要文件。

漏洞环境

  • 系统版本:RITEcms最新版
  • 默认后台凭证:admin/admin
  • 后台入口:admin.php

漏洞详细分析

1. 文件上传漏洞分析

漏洞触发路径

  1. 访问admin.php,使用默认凭证admin/admin登录
  2. 再次访问admin.php进入后台
  3. 导航至File Manager → Upload file
  4. 选择文件并上传

代码审计路径

  1. 入口文件:admin.php → 包含filemanage.inc.php文件
  2. 上传函数:filemanage.inc.php中的fileupload函数
// 实例化FileUpload类
$upload = new FileUpload($_FILES['file'], $directory);
  1. FileUpload类:位于cms/includes/classes/FileUpload.class.php
class FileUpload {
    public function __construct($upload, $uploadDir) {
        $this->upload = $upload;
        $this->uploadDir = $uploadDir;
    }
    
    // 文件移动操作
    public function moveUploadedFile($tempFileName) {
        move_uploaded_file($this->upload['tmp_name'], $this->uploadDir.$tempFileName);
    }
}
  1. 关键参数分析

    • $this->upload['tmp_name']:上传文件的临时路径
    • $this->uploadDir:由BASE_PATH.$directory.'/'构成
    • $tempFileName:上传后的文件名
  2. BASE_PATH定义:/data/settings.php中定义

define('BASE_PATH', dirname(dirname(__FILE__)));
  1. directory参数

    • 如果条件为true:使用/files目录
    • 如果条件为false:使用/media目录
  2. 文件保存逻辑

    • 当条件为false时,调用saveFile函数
    • 使用copy函数直接复制临时文件
public function saveFile($filename='') {
    copy($this->upload['tmp_name'], $this->uploadDir.$filename);
}

漏洞成因

  1. 缺乏文件类型检查
  2. 缺乏文件扩展名过滤
  3. 直接使用用户提供的文件名
  4. 使用copy函数而非安全的移动函数

2. 任意文件删除漏洞分析

漏洞触发条件

  1. 传递delete参数
  2. 存在confirmed参数

漏洞代码

位于filemanager.inc.php中:

if (isset($_GET['delete']) && isset($_GET['confirmed'])) {
    unlink(BASE_PATH.$_GET['delete']);
}

漏洞成因

  1. 直接使用用户提供的路径参数
  2. 缺乏路径校验和过滤
  3. 结合BASE_PATH可以删除系统任意文件

漏洞利用方式

文件上传漏洞利用

  1. 构造恶意文件(如PHP webshell)
  2. 通过后台文件上传功能上传
  3. 访问上传的文件执行任意代码

任意文件删除漏洞利用

  1. 构造delete参数指向系统重要文件
    • 如:?delete=/data/settings.php
  2. 添加confirmed参数确认删除
  3. 导致系统重要文件被删除,可能造成拒绝服务

修复建议

文件上传漏洞修复

  1. 实现严格的文件类型检查:
$allowedTypes = ['image/jpeg', 'image/png'];
if (!in_array($_FILES['file']['type'], $allowedTypes)) {
    die('Invalid file type');
}
  1. 限制文件扩展名:
$allowedExtensions = ['jpg', 'png', 'gif'];
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array(strtolower($extension), $allowedExtensions)) {
    die('Invalid file extension');
}
  1. 生成随机文件名:
$filename = md5(uniqid()).'.'.$extension;
  1. 使用move_uploaded_file而非copy

任意文件删除漏洞修复

  1. 限制可删除的文件路径:
$allowedPaths = ['/files/', '/media/'];
$path = BASE_PATH.$_GET['delete'];
$allowed = false;
foreach ($allowedPaths as $allowedPath) {
    if (strpos($path, $allowedPath) === 0) {
        $allowed = true;
        break;
    }
}
if (!$allowed) {
    die('Invalid file path');
}
  1. 添加CSRF防护
  2. 实现权限检查

总结

RITEcms系统中存在两个高危漏洞:

  1. 不安全的文件上传机制允许攻击者上传任意文件
  2. 缺乏过滤的文件删除功能允许删除系统任意文件

这两个漏洞组合使用可以导致完全的系统沦陷。建议开发者立即修复,用户应避免使用默认凭证并及时更新系统。

参考资源

  • RITEcms源代码:https://ritecms.com/download
  • 原始漏洞报告:奇安信攻防社区
RITEcms 文件上传与任意文件删除漏洞分析 漏洞概述 本文详细分析RITEcms系统中存在的两个安全漏洞: 不安全文件上传漏洞 任意文件删除漏洞 这两个漏洞存在于最新版本的RITEcms中,攻击者可以利用默认凭证进入后台,进而上传恶意文件或删除系统重要文件。 漏洞环境 系统版本:RITEcms最新版 默认后台凭证:admin/admin 后台入口:admin.php 漏洞详细分析 1. 文件上传漏洞分析 漏洞触发路径 访问admin.php,使用默认凭证admin/admin登录 再次访问admin.php进入后台 导航至File Manager → Upload file 选择文件并上传 代码审计路径 入口文件 :admin.php → 包含filemanage.inc.php文件 上传函数 :filemanage.inc.php中的fileupload函数 FileUpload类 :位于cms/includes/classes/FileUpload.class.php 关键参数分析 : $this->upload['tmp_name'] :上传文件的临时路径 $this->uploadDir :由 BASE_PATH.$directory.'/' 构成 $tempFileName :上传后的文件名 BASE_ PATH定义 :/data/settings.php中定义 directory参数 : 如果条件为true:使用/files目录 如果条件为false:使用/media目录 文件保存逻辑 : 当条件为false时,调用saveFile函数 使用copy函数直接复制临时文件 漏洞成因 缺乏文件类型检查 缺乏文件扩展名过滤 直接使用用户提供的文件名 使用copy函数而非安全的移动函数 2. 任意文件删除漏洞分析 漏洞触发条件 传递delete参数 存在confirmed参数 漏洞代码 位于filemanager.inc.php中: 漏洞成因 直接使用用户提供的路径参数 缺乏路径校验和过滤 结合BASE_ PATH可以删除系统任意文件 漏洞利用方式 文件上传漏洞利用 构造恶意文件(如PHP webshell) 通过后台文件上传功能上传 访问上传的文件执行任意代码 任意文件删除漏洞利用 构造delete参数指向系统重要文件 如: ?delete=/data/settings.php 添加confirmed参数确认删除 导致系统重要文件被删除,可能造成拒绝服务 修复建议 文件上传漏洞修复 实现严格的文件类型检查: 限制文件扩展名: 生成随机文件名: 使用move_ uploaded_ file而非copy 任意文件删除漏洞修复 限制可删除的文件路径: 添加CSRF防护 实现权限检查 总结 RITEcms系统中存在两个高危漏洞: 不安全的文件上传机制允许攻击者上传任意文件 缺乏过滤的文件删除功能允许删除系统任意文件 这两个漏洞组合使用可以导致完全的系统沦陷。建议开发者立即修复,用户应避免使用默认凭证并及时更新系统。 参考资源 RITEcms源代码:https://ritecms.com/download 原始漏洞报告:奇安信攻防社区