feifeicms 4.0 几处任意文件删除
字数 946 2025-08-29 08:31:41

FeifeiCMS 4.0 任意文件删除漏洞分析

漏洞概述

FeifeiCMS 4.0 存在多处任意文件删除漏洞,攻击者可以利用这些漏洞删除服务器上的任意文件。这些漏洞主要存在于后台管理模块中,由于对用户输入参数缺乏充分过滤,直接将参数拼接到文件路径中,导致可以删除非预期的文件。

漏洞位置与详情

1. DataAction.class.php 中的任意文件删除

漏洞位置

Lib/Lib/Action/Admin/DataAction.class.php

漏洞代码

public function del(){
    $filename = trim($_GET['id']);
    @unlink(DATA_PATH.'_bak/'.$filename);
    $this->success($filename.'已经删除!');
}

//删除所有分卷文件
public function delall(){
    foreach($_POST['ids'] as $value){
        @unlink(DATA_PATH.'_bak/'.$value);
    }
    $this->success('批量删除分卷文件成功!');
}

漏洞分析

  • 直接使用未经处理的$_GET['id']$_POST['ids']参数拼接文件路径
  • 攻击者可以构造特殊的文件名路径,实现目录穿越,删除任意文件
  • 默认情况下_bak文件夹不存在,需要先触发备份功能创建该目录

利用条件

  1. 需要先触发备份功能创建_bak目录
  2. 需要后台管理员权限

利用步骤

  1. 触发备份功能创建_bak目录:

    • 访问数据库备份功能
    • 满足strlen($sql) >= $filesize*1000条件创建备份文件
  2. 构造删除payload:

    http://localhost:8888/4.0.181010/index.php?s=/admin-data-del&id=../../../path/to/target/file
    

2. TplAction.class.php 中的任意文件删除

漏洞位置

Lib/Lib/Action/Admin/TplAction.class.php

漏洞代码

public function del(){
    $id = admin_ff_url_repalce(str_replace(trim($_GET['id'])));
    if (!substr(sprintf("%o",fileperms($id)),-3)){
        $this->error('无删除权限!');
    }
    @unlink($id);
    if (!empty($_SESSION['tpl_jumpurl'])) {
        $this->assign("jumpUrl",$_SESSION['tpl_jumpurl']);
    }else{
        $this->assign("jumpUrl",'?s=Admin/Tpl/Show');
    }
    $this->success('删除文件成功!');
}

漏洞分析

  • $_GET['id']参数仅经过trim()str_replace()处理,没有过滤路径穿越字符
  • 直接使用用户输入作为文件路径进行删除操作
  • 虽然检查了文件权限,但无法防止路径穿越

利用条件

  • 需要后台管理员权限

利用步骤

构造删除payload:

http://localhost:8888/4.0.181010/index.php?s=/admin-tpl-del&id=/path/to/target/file

漏洞修复建议

  1. 对用户输入进行严格过滤:

    • 过滤../等路径穿越字符
    • 限制文件名只能包含特定字符集
  2. 使用白名单机制:

    • 只允许删除特定目录下的特定类型文件
    • 验证文件路径是否在允许范围内
  3. 修复代码示例:

// 对于DataAction.class.php
public function del(){
    $filename = basename(trim($_GET['id'])); // 只获取文件名部分
    $filepath = DATA_PATH.'_bak/'.$filename;
    if(!is_file($filepath)) {
        $this->error('文件不存在!');
    }
    @unlink($filepath);
    $this->success($filename.'已经删除!');
}

// 对于TplAction.class.php
public function del(){
    $id = trim($_GET['id']);
    // 验证文件路径是否在模板目录内
    $allowed_dir = realpath(TEMPLATE_PATH);
    $target_file = realpath($id);
    if(strpos($target_file, $allowed_dir) !== 0) {
        $this->error('非法文件路径!');
    }
    if (!substr(sprintf("%o",fileperms($id)),-3)){
        $this->error('无删除权限!');
    }
    @unlink($id);
    $this->success('删除文件成功!');
}

总结

FeifeiCMS 4.0 中存在的任意文件删除漏洞主要源于对用户输入缺乏充分验证,直接将用户可控参数拼接到文件路径中。攻击者利用这些漏洞可以删除服务器上的重要文件,可能导致服务中断或更严重的安全问题。开发者应当对所有用户输入进行严格验证,特别是涉及文件系统操作时,应采用白名单机制限制可操作的文件范围。

FeifeiCMS 4.0 任意文件删除漏洞分析 漏洞概述 FeifeiCMS 4.0 存在多处任意文件删除漏洞,攻击者可以利用这些漏洞删除服务器上的任意文件。这些漏洞主要存在于后台管理模块中,由于对用户输入参数缺乏充分过滤,直接将参数拼接到文件路径中,导致可以删除非预期的文件。 漏洞位置与详情 1. DataAction.class.php 中的任意文件删除 漏洞位置 Lib/Lib/Action/Admin/DataAction.class.php 漏洞代码 漏洞分析 直接使用未经处理的 $_GET['id'] 和 $_POST['ids'] 参数拼接文件路径 攻击者可以构造特殊的文件名路径,实现目录穿越,删除任意文件 默认情况下 _bak 文件夹不存在,需要先触发备份功能创建该目录 利用条件 需要先触发备份功能创建 _bak 目录 需要后台管理员权限 利用步骤 触发备份功能创建 _bak 目录: 访问数据库备份功能 满足 strlen($sql) >= $filesize*1000 条件创建备份文件 构造删除payload: 2. TplAction.class.php 中的任意文件删除 漏洞位置 Lib/Lib/Action/Admin/TplAction.class.php 漏洞代码 漏洞分析 $_GET['id'] 参数仅经过 trim() 和 str_replace() 处理,没有过滤路径穿越字符 直接使用用户输入作为文件路径进行删除操作 虽然检查了文件权限,但无法防止路径穿越 利用条件 需要后台管理员权限 利用步骤 构造删除payload: 漏洞修复建议 对用户输入进行严格过滤: 过滤 ../ 等路径穿越字符 限制文件名只能包含特定字符集 使用白名单机制: 只允许删除特定目录下的特定类型文件 验证文件路径是否在允许范围内 修复代码示例: 总结 FeifeiCMS 4.0 中存在的任意文件删除漏洞主要源于对用户输入缺乏充分验证,直接将用户可控参数拼接到文件路径中。攻击者利用这些漏洞可以删除服务器上的重要文件,可能导致服务中断或更严重的安全问题。开发者应当对所有用户输入进行严格验证,特别是涉及文件系统操作时,应采用白名单机制限制可操作的文件范围。