【技術原創】滲透技巧——從VMware ESXI橫向移動到Windows虛擬機器

語言: CN / TW / HK

0x00 前言

假定以下測試環境:我們獲得了內網VMware ESXI的控制權限,發現VMware ESXI上安裝了Windows域控伺服器。

本文僅在技術研究的角度介紹從VMware ESXI橫向移動到該Windows域控伺服器的方法,結合利用思路,給出防禦檢測的方法。

0x02 簡介

本文將要介紹以下內容:

· 利用思路

· 常用命令

·實現方法

0x03 利用思路

通過VMware ESXI管理虛擬機器,建立快照檔案,從快照檔案中提取出有價值的資訊。

0x04 常用命令

1.檢視虛擬機器版本

vmware -vl

2.使用者資訊相關

(1)檢視所有使用者

esxcli system account list

(2)檢視管理員使用者

esxcli system permission list

(3)新增使用者

esxcli system account add -i test1 -p <a href="/cdn-cgi/l/email-protection" data-cfemail="4717263434302835230776">[email protected]</a> -c <a href="/cdn-cgi/l/email-protection" data-cfemail="de8ebfadada9b1acba9eef">[email protected]</a>

(4)將普通使用者新增成管理員使用者

esxcli system permission set -i test1 -r Admin

(5)啟用內建管理員賬戶

預設配置下,dcui是管理員使用者,但是不允許遠端登入,可以通過修改配置檔案的方式設定dcui使用者的口令並啟用遠端登入。

設定dcui使用者口令為Ballot5Twist7upset,依次輸入:

passwd dcui
Ballot5Twist7upset
Ballot5Twist7upset

一鍵設定dcui使用者口令:sed -i 's/dcui:\*:13358:0:99999:7:::/dcui:$6$NaeURj2m.ZplDfbq$LdmyMwxQ7FKh3DS5V\/zhRQvRvfWzQMSS3wftFwaUsD9IZuxdns.0X.SPx.59bT.kmJOJ\/y3zenTmEcoxDVQsS\/:19160:0:99999:7:::/g' /etc/shadow

啟用dcui使用者遠端登入:

修改檔案/etc/passwd,將dcui:x:100:100:DCUI User:/:/sbin/nologin修改為dcui:x:100:100:DCUI User:/:/bin/sh

一鍵啟用dcui使用者遠端登入:sed -i 's/dcui:x:100:100:DCUI User:\/:\/sbin\/nologin/dcui:x:100:100:DCUI User:\/:\/bin\/sh/g' /etc/passwd

開啟ssh:

vim-cmd hostsvc/enable_ssh

3.虛擬機器相關

(1)檢視所有虛擬機器

(2)檢視指定虛擬機器的狀態

(3)開啟指定虛擬機器,可用於開機和從掛起狀態恢復

(4)掛起指定虛擬機器

(5)關閉指定虛擬機器

(6)檢視指定虛擬機器的操作日誌

4.虛擬機器快照相關

(1)檢視指定虛擬機器的快照資訊

(2)新建快照

示例1:

< includeMemory >設定為true,表示包括記憶體,否則無法生成.vmem檔案。

示例2:

這個命令等價於vim-cmd vmsvc/snapshot.create 1 test "" false false,不包括記憶體,不會生成.vmem檔案。

(3)刪除快照

0x05 實現方法

1.獲得虛擬機器的vmid

測試環境下,從輸出中獲得虛擬機器Windows域控伺服器的vmid為1

2.檢視虛擬機器的快照資訊

測試環境下沒有虛擬機器快照。

3.為虛擬機器建立快照

測試環境下,從輸出中獲得虛擬機器Windows域控伺服器的snapshotIndex為1

4.使用volatility分析快照檔案

volatility是一款開源的取證分析軟體。

Python2版本的地址:https://github.com/volatilityfoundation/volatility

Python3版本的地址:https://github.com/volatilityfoundation/volatility3

volatility和volatility3的命令語法不同,功能基本相同,最新版本為volatility3,但這裡選擇volatility,理由如下:

·volatility有獨立的可執行程式,volatility3需要自己編譯

· volatility3有mimikatz外掛,可以從lsass程序提取資料,volatility3不支援這個外掛

(1)定位映象檔案

搜尋字尾名為vmem的檔案,命令如下:

測試環境下,獲得映象檔案位置為./vmfs/volumes/62a735a8-ad916179-40dd-000c296a0829/DC1/DC1-Snapshot1.vmem

(2)上傳volatility_2.6_lin64_standalone

volatility_2.6_lin64_standalone的下載地址:

http://downloads.volatilityfoundation.org/releases/2.6/volatility_2.6_lin64_standalone.zip

分析快照檔案需要.vmem檔案作為引數,而.vmem檔案通常很大,為了提高效率,這裡選擇將volatility上傳至VMware ESXI,在VMware ESXI上分析快照檔案。

(3)檢視映象資訊

通過映象資訊獲得系統版本,命令如下:

測試環境下,獲得Profile為Win2016x64_14393

(4)從登錄檔獲得本地使用者hash

命令如下:

測試環境下,輸出結果:

(5)從登錄檔讀取LSA Secrets

命令如下:

測試環境下,輸出結果:

(6)匯出所有域使用者hash

需要下載ntds.dit、SYSTEM檔案和SECURITY檔案。

定位ntds.dit檔案,命令如下:

輸出:

提取ntds.dit檔案,命令如下:

依次再提取出SYSTEM檔案和SECURITY檔案,匯出所有域使用者hash可以使用secretsdump,命令為:secretsdump -system SYSTEM -security SECURITY -ntds ntds.dit local

(7)載入mimikatz外掛,讀取lsass程序中儲存的憑據

volatility_2.6_lin64_standalone不支援載入mimikatz外掛,這裡可以選擇將整個快照檔案(DC1-Snapshot1.vmem)下載至本地,搭建volatility環境,載入mimikatz外掛。

kali安裝volatility的方法:

1. 安裝

2. 測試volatility

3. 新增mimikatz外掛

下載地址:https://github.com/volatilityfoundation/community/blob/master/FrancescoPicasso/mimikatz.py

將mimikatz.py儲存至

4.安裝mimikatz外掛的依賴

這裡不能直接使用pip2 install construct,construct版本過高會導致在載入mimikatz.py時報錯AttributeError: 'module' object has no attribute 'ULInt32'

5.測試外掛

輸出:

安裝成功。

載入mimikatz外掛的命令如下:

輸出結果:

補充:

讀取lsass程序中儲存的憑據還可以使用以下方法:

1. 將映象檔案轉成Crash Dump檔案

2. 使用Mimilib從dump檔案中匯出口令

詳細方法可參考之前的文章 《滲透技巧——使用Mimilib從dump檔案中匯出口令》

5.刪除快照

0x06 防禦檢測

1. 防禦

內網VMware ESXI及時更新補丁

關閉內網VMware ESXI的ssh登入功能

2. 檢測

檢視內網VMware ESXI登入日誌

檢視虛擬機器快照映象標誌snapshotIndex是否異常,對於新的虛擬機器,新建快照標誌snapshotIndex從1開始累加,刪除快照映象不會影響snapshotIndex,例如刪除snapshotIndex為1的快照,再次建立快照時snapshotIndex為2`

0x07 小結

本文在技術研究的角度介紹了從VMware ESXI橫向移動到該Windows域控伺服器的方法,使用volatility分析映象檔案,提取關鍵資訊,結合利用思路,給出防禦檢測的方法。