聲明
出品|先知社區(qū)(ID:LeeH)
以下內(nèi)容,來自先知社區(qū)的Bamboo作者原創(chuàng),由于傳播,利用此文所提供的信息而造成的任何直接或間接的后果和損失,均由使用者本人負責,長白山攻防實驗室以及文章作者不承擔任何責任。
前言
VMware vCenter ESXI中經(jīng)常會裝一些非常重要的業(yè)務虛擬服務器,Linux一般都是登錄狀態(tài)的,但是Windows機器鎖屏較多,想要獲取服務器權(quán)限,一般需要把vmem文件下載下來,用內(nèi)存分析工具進行hashdump等,以突破其鎖屏獲取服務器權(quán)限。筆者在對volatility工具進行了解后,對分析vmem文件的手法進行了一定優(yōu)化,可以提升解決鎖屏問題的效率。
思路
在了解了volatility內(nèi)存取證工具后,想到了幾種辦法:
python3版本
VMware vCenter ESXI中自帶了python3.6.8,可以嘗試直接在esxi中部署volatility3項目;
利用pyinstaller將volatility3進行打包,生成可執(zhí)行文件拖到esxi中使用。根據(jù)打包環(huán)境不同,又有兩種思路:
在esxi上部署volatility3項目后,打包出來的會更適用;
在其他Linux中部署volatility3項目(環(huán)境盡可能接近esxi),打包出來用。
python2版本:
最一開始對項目了解的不夠深入,沒注意到項目團隊已經(jīng)把volatility2制作成了可執(zhí)行文件,導致前期一直在死磕打包volatility3,后來在小伙伴的提醒下,發(fā)現(xiàn)3gstudent師傅研究了利用volatility2進行Windows鎖屏問題解決,在此先膜拜下師傅。

不過官方團隊并沒有打包volatility3的可執(zhí)行程序,原因?qū)懙氖谴虬鰜淼膒ackages會被識別為惡意軟件,解決了這個問題就會出可執(zhí)行程序了。

過程
思路一、直接在esxi中部署volatility3項目
Linux環(huán)境下的esxi,這個思考很快就被證明不太可行了,volatility3需要多個系統(tǒng)庫和pip庫:
yum install zlib &&\yum install zlib-devel &&\yum install bzip2-devel &&\yum install ncurses-devel &&\yum install sqlite-devel &&\yum install readline-devel &&\yum install gcc &&\yum install libffi &&\yum install libffi-devel &&\yum install gcc-c++\yum install openssl-devel\yum install tk-devel
需要pip3
yum install xz-develyum install epel-releaseyum install python35-devel
需要n多個系統(tǒng)依賴以及n多個pip依賴
pip3 install pefile==2018.8.8 -i http://pypi.douban.com/simple --trusted-host pypi.douban.compip3 install backports.lzma -i http://pypi.douban.com/simple --trusted-host pypi.douban.compip3 install pycryptodomepip install importlib-metadata==0.6
思路二、打包Vol進行后利用
1.選好合適的系統(tǒng)
CentOS 7.9跟exsi的GLIBC庫版本一致,自帶python3.6,比較合適。
安裝編譯后續(xù)可能會用到的依賴::
yum install zlib &&\yum install zlib-devel &&\yum install bzip2-devel &&\yum install ncurses-devel &&\yum install sqlite-devel &&\yum install readline-devel &&\yum install gcc &&\yum install libffi &&\yum install libffi-devel &&\yum install gcc-c++ &&\yum install openssl-devel &&\yum install tk-devel
2.下載Volatility3項目
GitHub地址:https://github.com/volatilityfoundation/volatility3
3.安裝pip依賴
正常安裝到y(tǒng)ara的時候應該會報錯,需要安裝python-dev庫才行
CentOS系統(tǒng):# 安裝EPEL源yum install epel-release -y# 默認安裝python3.6開發(fā)包yum?install?python3-devel?-yUbuntu系統(tǒng):apt-get install python3-dev
裝好python-dev之后,安裝依賴即可。
pip3 install -r requirements.txt也可以這么安裝
pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com4.安裝Volatility3
需要先更新下setuptools不然等下安裝編譯 Python的相關(guān)包安裝會報錯:
pip3 install --upgrade setuptools安裝Volatility3
python3 setup.py install完成安裝后,測試是否能正常使用
python3 vol.py查看運行是否有異常提示:
python3 vol.py -vv測試功能是否正常
python3 vol.py -f xxx.vmem windows.infopython3 vol.py -f xxx.vmem windows.hashdump
5.安裝pyinstaller
pip3 install pyinstaller==3.66.打包Volatility3
修改spec,默認只有vol.py,增加了hashdump和yarascan;還增加了vol_coll使打包出來的是一個文件夾。打包,默認是放在dist目錄下。
pyinstaller vol-new.spec需要把打包完成的vol文件夾中base_library.zip解壓一下,解壓至當前目錄即可。
7.使用
從CentOS7中把vol壓縮下,搞到目標esxi服務器上解壓,給好權(quán)限應該就能用了。
PS:Volatility3做Windows內(nèi)存文件分析時,需要聯(lián)網(wǎng)到微軟網(wǎng)站那邊下一個字符庫,所以需要目標esxi能出網(wǎng)。
8.踩坑過程
8.1. GLIBC版本問題
使用Ubuntu16及kali之類的系統(tǒng),打包出來的vol在exsi中無法運行

查看esxi的GLIBC版本,發(fā)現(xiàn)為2.17:

嘗試將高版本的so文件拷貝到esxi系統(tǒng)中,嘗試將libc-2.27.so修改為libc.2.17.so,系統(tǒng)立馬就GG了,還好mobax的sftp還能用:

需要找GLIBC版本一致,或更低版本的系統(tǒng),打包vol才可以運行:
centos6.6服務器的glibc默認版本為2.12
centos7系統(tǒng)的默認glibc版本已經(jīng)升級2.17
其中vultr中默認的CentOS7版本就可以:
strings /usr/lib64/libc.so.6 | grep GLIBC

以及centos7.9版本也是可以的
8.2. No module named 'encodings'
在esxi中運行打包好的vol會提示No module named 'encodings'

解決辦法,把base_library.zip解壓出來即可,注意需要解壓到當前目錄,不能解壓到base_library文件夾里。
8.3. spec打包問題
左邊是打包為單一文件,右邊是打包為一個文件夾

8.4. 正常打包后功能異常

解決方法:
其實就是作者寫vol.spec的時候,有些pip庫沒有打包上,增加上hashdump和yarascan就行了。
vol_analysis = Analysis(['vol.py','volatility3/framework/plugins/windows/hashdump.py','volatility3/framework/plugins/yarascan.py'],
9. 聯(lián)網(wǎng)問題
在esxi中直接運行打包好的Volatility,在聯(lián)網(wǎng)的情況下,已經(jīng)可以完成hashdump。但是在無法聯(lián)網(wǎng)的時候,無法下載到symbols文件,也就是pdb(program
database)文件,且該文件無法直接通過瀏覽器下載到。通過對項目的深入了解,發(fā)現(xiàn)作者有提供了下載pdb文件的解決辦法。
作者并沒有在readme中寫明下載pdb文件的方法,在斷網(wǎng)狀態(tài)下調(diào)試腳本運行過程的時候,才發(fā)現(xiàn)作者留的小驚喜,上述調(diào)試信息中,關(guān)鍵點是:
Symbol file could not be downloaded from remote serverRequired symbol library path not found: ntkrnlmp.pdb\118018959D8D7CA5AAB45B75AED5A976-1The symbols can be downloaded later using pdbconv.py -p ntkrnlmp.pdb -g 118018959D8D7CA5AAB45B75AED5A9761
也就是說用pdbconv.py可以下載到所需的pdb文件:

將下載好的symbols文件放入以下目錄,重新運行vol.py進行hashdump即可:
/tmp/vol/volatility3/framework/symbols/windows/ntkrnlmp.pdb/
坑點
這里遇到了個小問題就是pycharm可以正常運行該腳本進行下載,但是本地命令行運行腳本會提示No module named 'volatility3',網(wǎng)上搜了下說是環(huán)境變量的問題,加上打印環(huán)境變量的語句,pycharm和命令行分別運行了下,確實是pycharm多了些路徑:
print("當前工作目錄:",os.getcwd())print("python搜索模塊的路徑集合:",sys.path)

定位到問題后,根據(jù)網(wǎng)上的解決辦法,在pdbconv.py中加上缺少的路徑即可正常使用該腳本:
sys.path.append("D:\\PythonDev\\project\\volatility3-develop")sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_display")sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend")
總結(jié)
目前不出網(wǎng)狀態(tài)解一個windows的hash大概需要3-7分鐘,如果優(yōu)化這個工具確實有很高實用價值,后續(xù)會繼續(xù)進行優(yōu)化,爭取能3分鐘解決戰(zhàn)斗。發(fā)現(xiàn)問題,解決問題,總結(jié)經(jīng)驗,分享方法,共同進步。
歡迎關(guān)注長白山攻防實驗室微信公眾號
定期更新優(yōu)質(zhì)文章分享