实战|Vmware vSphere任意文件上传RCE

admin 2022年9月26日08:59:21评论63 views字数 2293阅读7分38秒阅读模式

背景: 对某大学进行内网资产收集时 发现有Vmware vSphere

Vmware vSphere vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi、vCenter Server 等一系列的软件。其中 vCenter Server 为 ESXi 的控制中心,可从单一控制点统一管理数据中心的所有 vSphere 主机和虚拟机,使得 IT 管理员能够提高控制能力,简化入场任务,并降低 IT 环境的管理复杂性与成本。

信息收集

使用scaninfo对172.16进行扫描 部分资产如下实战|Vmware vSphere任意文件上传RCE可以看到除了Vmware vSphere 还有几百个海康威视 web页面如下实战|Vmware vSphere任意文件上传RCE

漏洞分析

代码

  @RequestMapping(
value = {"/uploadova"},
method = {RequestMethod.POST}
)
public void uploadOvaFile(@RequestParam(value = "uploadFile",required = true) CommonsMultipartFile uploadFile, HttpServletResponse response) throws Exception {
logger.info("Entering uploadOvaFile api");
int code = uploadFile.isEmpty() ? 400 : 200;
PrintWriter wr = null;
...
response.setStatus(code);
String returnStatus = "SUCCESS";
if (!uploadFile.isEmpty()) {
try {
logger.info("Downloading OVA file has been started");
logger.info("Size of the file received : " + uploadFile.getSize());
InputStream inputStream = uploadFile.getInputStream();
File dir = new File("/tmp/unicorn_ova_dir");
if (!dir.exists()) {
dir.mkdirs();
} else {
String[] entries = dir.list();
String[] var9 = entries;
int var10 = entries.length;

for(int var11 = 0; var11 < var10; ++var11) {
String entry = var9[var11];
File currentFile = new File(dir.getPath(), entry);
currentFile.delete();
}

logger.info("Successfully cleaned : /tmp/unicorn_ova_dir");
}

TarArchiveInputStream in = new TarArchiveInputStream(inputStream);
TarArchiveEntry entry = in.getNextTarEntry();
ArrayList result = new ArrayList();

代码逻辑是将 TAR 文件解压后上传到 /tmp/unicorn_ova_dir 目录。注意到如下代码

代码

while(entry != null) {
if (entry.isDirectory()) {
entry = in.getNextTarEntry();
} else {
File curfile = new File("/tmp/unicorn_ova_dir", entry.getName());
File parent = curfile.getParentFile();
if (!parent.exists()) {
parent.mkdirs();

直接将 TAR 的文件名与 /tmp/unicorn_ova_dir 拼接并写入文件。如果文件名内存在 ../ 即可实现目录遍历

这里两个思路 linux可以直接写进公钥或者一句话  windows 只能写一句话 这位我采用linux写入冰蝎的一句话(老实说第一次用冰歇)实战|Vmware vSphere任意文件上传RCE然后构建一个../../+任意路径的TAR压缩包实战|Vmware vSphere任意文件上传RCE采用python3发包实战|Vmware vSphere任意文件上传RCE上传成功实战|Vmware vSphere任意文件上传RCE访问刚刚上传的jsp 状态码200 但是没有任何内容回显 一开始以为是被杀软拦截了  但是后面可以直接用冰歇3.0一键连接实战|Vmware vSphere任意文件上传RCE

获取vcenter-web控制台权限

这里有三个思路

1.直接重置密码(会被管理员发现)

2.解密cookie替换登录

Liunx在/storage/db/vmware-vmdir/data.mdb目录 但是由于我拿到是shell权限不够无法查看 这里暂时不做提权

3.查看数据库 我这里采用的是这种 但是 解密一直报错 可能是版本或者加密方式改了 可以先记录当前已加密的值 然后通过步骤1 重置密码 完了之后再把值替换回去

实战|Vmware vSphere任意文件上传RCE可以看到使用的是pg数据库 默认只能本地访问

执行

psql -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;

实战|Vmware vSphere任意文件上传RCE这里我使用脚本解密 自带的例子解密成功 但是我的密文报错实战|Vmware vSphere任意文件上传RCE所以这里使用思路一

/usr/lib/vmware-vmdir/bin/vdcadmintool

实战|Vmware vSphere任意文件上传RCE可以看到3选项直接重置密码

总结

这里做的并不是很完美 例如 可以直接写进公私密钥authorized_keys  直接ssh登录 提权 等等一系列操作 仅仅是测试改面板存在任意文件上传导致远程代码执行 未完待续......


原文始发于微信公众号(CKCsec安全研究院):实战|Vmware vSphere任意文件上传RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月26日08:59:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战|Vmware vSphere任意文件上传RCEhttp://cn-sec.com/archives/1315533.html

发表评论

匿名网友 填写信息