在這篇文章中,我們將跟大家介紹如何使用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的功能還遠不止如此,本文介紹的內容僅僅是冰山一角,感興趣的同學可以利用搜索引擎來了解更多的相關知識。