在這篇文章中,我們将跟大家介紹如何使用Meterpreter來收集目标Windows系統中的資訊,擷取使用者憑證,建立我們自己的賬号,啟用遠端桌面,進行螢幕截圖,以及擷取使用者鍵盤記錄等等。
相關Payload
Payload中包含有需要在遠端系統中運作的惡意代碼,而在Metasploit中Payload是一種特殊子產品,它們能夠以漏洞利用子產品運作,并能夠利用目标系統中的安全漏洞實施攻擊。簡而言之,這種漏洞利用子產品可以通路目标系統,而其中的代碼定義了Payload在目标系統中的行為。
Metasploit中的Payload子產品主要有以下三種類型:
-Single
-Stager
-Stage
Single是一種完全獨立的Payload,而且使用起來就像運作calc.exe一樣簡單,例如添加一個系統使用者或删除一份檔案。由于Single Payload是完全獨立的,是以它們有可能會被類似netcat這樣的非metasploit處理工具所捕捉到。
Stager這種Payload負責建立目标使用者與攻擊者之間的網絡連接配接,并下載下傳額外的元件或應用程式。一種常見的Stagers Payload就是reverse_tcp,它可以讓目标系統與攻擊者建立一條tcp連接配接。另一種常見的是bind_tcp,它可以讓目标系統開啟一個tcp監聽器,而攻擊者随時可以與目标系統進行通信。
Stage是Stager Payload下載下傳的一種Payload元件,這種Payload可以提供更加進階的功能,而且沒有大小限制。
在Metasploit中,我們可以通過Payload的名稱和使用格式來推斷它的類型:
Single Payload的格式為<target>/ <single>
Stager/Stage Payload的格式為<target>/ <stage> / <stager>
當我們在Metasploit中執行“show payloads”指令之後,它會給我們顯示一個可使用的Payload清單:
在這個清單中,windows/powershell_bind_tcp就是一個Single Payload,它不包含Stage Payload。而windows/x64/meterpreter/reverse_tcp則由一個Stager Payload(reverse_tcp)和一個Stage Payload(meterpreter)組成。
Meterpreter是什麼?
在Metasploit Framework中,Meterpreter是一種後滲透工具,它屬于一種在運作過程中可通過網絡進行功能擴充的動态可擴充型Payload。這種工具是基于“記憶體DLL注入”理念實作的,它能夠通過建立一個新程序并調用注入的DLL來讓目标系統運作注入的DLL檔案。
其中,攻擊者與目标裝置中Meterpreter的通信是通過Stager套接字實作的。
部署Meterpreter
在這裡,我們選擇使用reverse_tcp(windows/x64/meterpreter/reverse_tcp)來作為Stager,配置和運作情況如下圖所示:
注意:運作了exploit指令之後,我們開啟了一個reverseTCP處理器來監聽192.168.198.196:4444,即我(攻擊者)的本地主機位址(LHOST)和端口号(LPORT)。運作成功之後,我們将會看到指令提示符meterpreter >出現。
接下來,我們就可以開始“做事”了。
通路檔案系統
Meterpreter支援非常多的檔案系統指令(基本跟Linux系統指令類似),一些常用指令如下:
cd:切換目标目錄;
cat:讀取檔案内容;
del:删除檔案;
edit:使用vim編輯檔案
ls:擷取目前目錄下的檔案;
mkdir:建立目錄;
rmdir:删除目錄;
上傳/下載下傳檔案
“download”指令可以幫助我們從目标系統中下載下傳檔案,“upload”指令則能夠向目标系統上傳檔案。
“download”指令的使用樣例如下所示:
權限提升
有的時候,你可能會發現自己的Meterpreter會話受到了使用者權限的限制,而這将會嚴重影響你在目标系統中的活動。比如說,修改系統資料庫、安裝後門或導出密碼等活動都需要提升使用者權限,而Meterpreter給我們提供了一個“getsystem”指令,它可以使用多種技術在目标系統中實作提權:
“getuid”指令可以擷取目前使用者的資訊,在上面的例子中,使用者為“NT AUTHORITY\SYSTEM”,這個就是Windows本地系統賬号。
擷取憑證
hashdump子產品(post)可以從SAM資料庫中導出本地使用者賬号,credential_collector腳本(post/windows/gather/credentials)也可以從目标裝置中收集令牌資訊。
腳本和post子產品都需要通過“run”指令執行,我在測試環境中運作hashdump子產品後的結果如下:
資料的輸出格式為:使用者名:SID:LM哈希:NTLM哈希:::,是以我們得到了三個使用者賬号,分别為Administrator, Guest和Coen。
其中的LM哈希(aad3b435b51404eeaad3b435b51404ee)跟NTLM哈希(31d6cfe0d16ae931b73c59d7e0c089c0)對應的是一個空密碼。
接下來要處理的就是使用者Coen的密碼(f773c5db7ddebefa4b0dae7ee8c50aea)了。雖然我們可以使用類似John the Ripper這樣的工具來破解密碼,但是我們直接Google這個哈希之後,就直接得到了密碼明文:trustno1。
運作程式
我們還可以使用“execute”指令在目标系統中執行應用程式。這個指令的使用方法如下:
execute -f<file> [Options]
運作後它将執行file參數所指定的檔案。可選參數如下:
-H:建立一個隐藏程序
-a:傳遞給指令的參數
-i:跟程序進行互動
-m:從記憶體中執行
-t:使用目前僞造的線程令牌運作程序
-s:在給定會話中執行程序
螢幕截圖
我們可以使用“screenshot”指令來進行螢幕截圖并存儲在我們的系統之中。
截取的效果如下所示:
建立一個新賬号
接下來,我們可以在目标系統中建立一個新的使用者賬号(getgui腳本,使用-u和-p參數),并給它配置設定管理者權限(使用),然後将其添加到”遠端桌面使用者”組中。
當然了,你也可以嘗試将這個新添加的使用者Hacker在Windows登入界面中隐藏。
啟用遠端桌面
當我們新添加的使用者已經擁有遠端桌面權限之後,我們就可以使用這個賬号憑證來開啟遠端桌面會話了。
首先,我們需要確定目标Windows裝置開啟了遠端桌面功能(需要開啟多個服務),不過我們的getgui腳本可以幫我們搞定。我們可以使用-e參數確定目标裝置開啟了遠端桌面功能(重新開機之後同樣會自動開啟):
在開啟遠端桌面會話之前,我們還需要使用“idletime”指令檢查遠端使用者的空閑時長:
這樣可以降低你被發現的機率,因為當目标使用者登入之後,它将會看到如下圖所示的資訊:
下圖顯示的是攻擊者使用新建立的“Hacker”賬号連接配接到遠端桌面的畫面:
鍵盤記錄
Meterpreter還可以在目标裝置上實作鍵盤記錄功能,鍵盤記錄主要涉及以下三種指令:
keyscan_start:開啟鍵盤記錄功能
keyscan_dump:顯示捕捉到的鍵盤記錄資訊
keyscan_stop:停止鍵盤記錄功能
首先,我們需要啟動鍵盤記錄程序:
啟動之後,我們需要等待一段時間後再導出記錄資訊:
不過在使用鍵盤記錄功能時,通常需要跟目标程序進行綁定,接下來我們介紹如何綁定程序。
綁定程序
Meterpreter既可以單獨運作,也可以與其他程序進行綁定。是以,我們可以讓Meterpreter與類似explorer.exe這樣的程序進行綁定,并以此來實作持久化。
在下面的例子中,我們會将Meterpreter跟winlogon.exe綁定,并在登入程序中捕獲鍵盤記錄。
首先,我們需要使用“ps”指令檢視目标裝置中運作的程序:
接下來,使用“getpid”找出需要綁定的程序,接下來,使用migrate指令+pid來綁定程序。
綁定完成之後,我們就可以開始捕獲鍵盤資料了:
接下來,我們可以選擇導出鍵盤記錄,或者使用指令“enum_logged_on_users”來檢查使用者是否成功登入:
等待片刻之後,使用keyscan_dump指令導出記錄資訊:
捕捉到的使用者密碼為trustno1。
清除事件日志
完成攻擊操作之後,千萬别忘了“打掃戰場”。我們的所有操作都會被記錄在目标系統的日志檔案之中,是以我們需要在完成攻擊之後使用指令“clearev”指令來清除事件日志:
總結
當然了,Meterpreter的功能還遠不止如此,本文介紹的内容僅僅是冰山一角,感興趣的同學可以利用搜尋引擎來了解更多的相關知識。