Good in study, attitude and health

vSphere开发指南6——vCenter SAML Certificates

0x00 前言


我最近学到的一个利用方法:在vCenter上使用管理员权限,从/storage/db/vmware-vmdir/data.mdb提取IdP证书,为管理员用户创建SAML请求,最后使用vCenter server进行身份验证并获得有效的管理员cookie。

直观理解:从vCenter本地管理员权限到VCSA管理面板的管理员访问权限。

学习资料:

https://www.horizon3.ai/compromising-vcenter-via-saml-certificates/ https://github.com/horizon3ai/vcenter_saml_login

本文将要在学习资料的基础上,完善代码,增加通用性,结合利用思路给出防御建议。

0x01 简介


本文将要介绍以下内容:

  • 方法复现
  • 脚本优化
  • 利用思路
  • 防御建议

0x02 方法复现


在Kali系统下进行测试

安装Openssl:

apt install python3-openssl

1.从vCenter获得数据库文件

路径:/storage/db/vmware-vmdir/data.mdb

需要vCenter管理员权限

2.运行脚本

下载地址:

https://github.com/horizon3ai/vcenter_saml_login/blob/main/vcenter_saml_login.py

命令参数示例:

python3 ./vcenter_saml_login.py -t 192.168.1.1 -p data.mdb

命令行返回结果:

JSESSIONID=XX533CDFA344DE842517C943A1AC7611

3.登录VCSA管理面板

访问https://192.168.1.1/ui

设置Cookie: JSESSIONID=XX533CDFA344DE842517C943A1AC7611

成功以管理员身份登录管理面板

0x03 脚本优化


通常data.mdb的大小至少为20MB

为了减少交互流量,选择将vcenter_saml_login.py修改成能够直接在vCenter下使用

注:

vCenter默认安装Python

在脚本修改上具体需要考虑以下问题:

1.去掉引用第三方包bitstring

我采用的方式是将第三方包bitstring的内容进行精简,直接插入到Python脚本中

2.避免使用f-字符串格式化

Python3.6新增了一种f-字符串格式化

vCenter 6.7的版本为Python 3.5.6,不支持格式化的字符串文字前缀为”f”

我采用的方式是使用format实现格式化字符串

例如:

cn = stream.read(f'bytes:{cn_len}').decode()

替换为:

cn = stream.read('bytes:{}'.format(cn_len)).decode()

完整代码已上传至Github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_ExtraCertFromMdb.py

vCenter_ExtraCertFromMdb.py可上传至vCenter后直接执行,执行后会得到以下四个重要的参数:

  • domain,在命令行显示
  • idp_cert,保存为idp_cert.txt
  • trusted_cert_1,保存为trusted_cert_1.txt
  • trusted_cert_2,保存为trusted_cert_2.txt

接下来,可在任意主机上为管理员用户创建SAML请求,使用vCenter server进行身份验证并获得有效的管理员cookie,完整代码已上传至Github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_GenerateLoginCookie.py

参数说明如下:

  • target: VCSA管理面板的URL
  • hostname: 对应VCSA管理面板的证书Subject属性中的CN
  • domain: 可以使用vCenter_ExtraCertFromMdb.py从data.mdb中获得
  • idp_cert path: 可以使用vCenter_ExtraCertFromMdb.py从data.mdb中获得
  • trusted_cert_1 path: 可以使用vCenter_ExtraCertFromMdb.py从data.mdb中获得
  • trusted_cert_2 path: 可以使用vCenter_ExtraCertFromMdb.py从data.mdb中获得

0x04 利用思路


1.从vCenter本地管理员权限到VCSA管理面板的管理员访问权限

前提:通过漏洞获得了vCenter本地管理员权限

利用效果:

获得VCSA管理面板的管理员访问权限,能够同vCenter可管理的虚拟机进行交互

注:

此时还可以通过《vSphere开发指南5——LDAP》中介绍的方法通过LDAP数据库添加管理员用户,进而同vCenter可管理的虚拟机进行交互

2.从vCenter备份文件中得到data.mdb

前提:需要获得正确的data.mdb文件

利用效果:

获得VCSA管理面板的管理员访问权限,能够同vCenter可管理的虚拟机进行交互

0x05 防御建议


1.更新补丁,避免攻击者获得vCenter本地管理员权限

2.避免在用的vCenter备份文件泄露

0x06 小结


本文介绍了vcenter_saml_login的优化思路,增加通用性,结合利用思路给出防御建议。


LEAVE A REPLY