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 防御建议
- 更新补丁,避免攻击者获得 vCenter 本地管理员权限
- 避免在用的 vCenter 备份文件泄露
0x06 小结
本文介绍了 vcenter_saml_login 的优化思路,增加通用性,结合利用思路给出防御建议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 利用 TelemetryController 实现的后门分析
下一篇: Jvm 常量池
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论