滲透測試——Meterpreter

Meterpreter 優點:
  • 平臺通用性:Meterpreter 提供了基於 JAVA 和 PHP 語言的實現,以應用在各種不同的環境中

  • 純內存工作模式:執行漏洞滲透攻擊的時候,會直接裝載 Meterpreter 的動態鏈接庫到目標進程空間中,而不是先將 Meterpreter 上傳到磁盤然後再調用 Loadlibrary 加載動態鏈接庫來啓動 Meterpreter。這裏便會有一個技術問題, Loadlibrary 只能從磁盤或者網絡共享里加載動態鏈接庫而不能直接從內存中進行加載;這時 Metasploit 的處理辦法是 HOOK Loadlibrary 調用的一些內核 API,這種鉤子技術允許 Meterpreter 的動態鏈接庫從內存中直接加載,而不會在目標主機的磁盤上留下任何痕跡。這種純內存工作模式的好處是啓動隱蔽,很難被殺毒軟件監測打。此外也不需要訪問目標主機磁盤,基本不留下入侵的證據,同時這種模式不需要創建新的進程,避免了在 chroot 環境下運行的尷尬

  • 靈活且加密的通信協議:Meterpreter 提供了靈活且加密的客戶端服務通信協議,能夠對網絡傳輸進行加密,同時這種通信協議設計支持靈活的功能擴展。
    Meterpreter 的網絡通信協議採用 TLV (Type Length Value) 數據封裝格式。其中 Type 佔 4 字節,不同命令與數據類型對應不同的 Type 值;Length爲 4 字節,包含了 三個字段的總長度;Value 爲封裝的數據內容,也可以爲 TLV 的數據格式。這種循環嵌套的封裝形式既提供了高度的靈活性,允許描述複雜的數據結構,又保證了傳輸的魯棒性。另外,Meterpreter 的通信數據進行了加密狐狸,首先對發送輸幾局進行 16 字節一組的 XOR 加密,然後調用 OpenSSL 庫對應用層數據進行 SSL 封裝傳輸。
    在這裏插入圖片描述

  • 易於擴展:Meterpreter 在功能上來說不是一般的 Shellcode 能比擬的,如果用戶需要一些特殊或者定製的功能,可以輕易的在 Meterpreter 中添加擴展 (或插件) 來實現。Meterpreter 的插件以動態鏈接庫文件的形式存在,可以選擇不同的編程語言按照 Meterpreter 的接口形式編寫需要的功能,然後編譯成動態鏈接庫,拷貝到 …/framework/data/meterpreter 目錄下即可,使用的時候在 Meterpreter 會話中使用 use 命令進行加載。在 msf3/scripts/meterpreter 目錄下,有許多 Meterpreter 的擴展腳本可以參考,自己的擴展腳本也可以放置在這個目錄下,在 Meterpreter 會話中通過 run 命令使用。


常用的 Meterpreter 命令詳解

首先獲得 Meterpreter 的 Shell 會話
通過 Metasploit 中的 MS08_067 漏洞滲透攻擊模塊獲得。具體操作如下:
在這裏插入圖片描述
可以使用 “?” 或 “help” 命令獲得 Meterpreter 命令的幫助信息。

Meterpreter 命令分爲基本命令、文件系統命令、網絡命令、系統命令和用戶接口命令幾大類。用戶接口命令是用戶使用 use 命令加載插件後產生的命令。

1. 基本命令

基本命令包含 Meterpreter 與 MSF 終端、Ruby 接口、目標 shell 等交互的命令

① background 命令
若想在 MSF 終端中執行其他任務,可以使用 background 命令將 Meterpreter 終端隱藏在後臺:
在這裏插入圖片描述

② session 命令
Metasploit 的 session命令可以查看已經成功獲取的會話,如果想繼續與某會話進行交互,可以使用 session -i命令:
在這裏插入圖片描述

③ shell 命令
shell 命令可以獲取系統的控制檯 Shell,如果目標系統上的命令行可執行程序不存在或禁止訪問,那麼 shell 命令會出錯。成功的運行結果如下:
在這裏插入圖片描述

④ irb 命令
irb 命令可以在 Meterpreter 會話裏與 Ruby 終端進行交互,直接調用 Metasploit 封裝好的函數,如下顯示了使用 irb 命令調用 client.sys.config.sysinfo()函數獲取系統配置信息的結果:
在這裏插入圖片描述
在 irb 中還可以通過添加 Metasploit 的附加組件—— Railgun,直接與 Windows 本地的 API 進行交互。Railgun 是 Meterpreter 的 Ruby 語言擴展,允許在目標機上使用所有的 Windows API。

meterpreter > irb
[*] Starting IRB shell
[*] The 'client' variable holds the meterpreter client
>> client.core.use("railgun")
=> true

在添加 Railgun 擴展後,就可以直接調用 Windows API 了。
如下調用 MessageBoxA API 函數:
client.railgun.user32.MessageBoxA(0,"hello! world", NULL,MB_OK)
這行代碼會在目標機上彈出 “hello~world” 窗口。
調用下面這行代碼,將阻止目標主機在 Meterpreter 會話期間進入休眠狀態,防止管理員不在時主機自動休眠造成 Meterpreter 會話的丟失:
client.railgun.kerne132.SetThreadExecutionState("ES_CONTINUOUS | ES_SYSTEM_REQUIRED")

2. 文件系統命令

文件系統命令允許 Meterpreter 與目標的文件系統進行交互,包括查看文件內容、上傳下載文件、對文件進行搜索、直接編輯文件等功能。

① cat 命令
使用 cat 命令查看文件內容:
在這裏插入圖片描述
上述命令在 system 權限下,可以讀取目標及其上的 boot.ini 文件,並獲得引導文件信息。這裏要注意必須使用雙斜槓進行轉義

② getwd 命令
getwd 命令可以獲得目標機上當前的工作目錄;相似的命令有 getlwd ,這個命令可以獲得當前系統的工作目錄。
在這裏插入圖片描述

③ upload 命令
Meterpreter 的 upload 命令可以上傳文件或文件夾到目標及其上。參數 -r 可以將文件夾內的文件或文件夾遞歸的上傳,不需要考慮多層目錄的問題。
在這裏插入圖片描述
可以在目標主機上的 C 盤下找到 putty.exe 文件
在這裏插入圖片描述
若使用 -r 參數,則可以將文件夾中的文件和文件夾遞歸上傳:
在這裏插入圖片描述
在這裏插入圖片描述

④ download 命令
download 命令從目標機上下載文件或文件夾,需要注意的是這裏需要用雙斜槓進行轉義
在這裏插入圖片描述
在本機的當前目錄下就會出現一個 Netlog.txt 文件
在這裏插入圖片描述

⑤ edit 命令
使用 edit 命令可以調用 vi 編輯器,對目標機上的文件進行編輯:
輸入命令:edit c:\\windows\\system32\\drivers\\etc\\hosts
直接編輯受控主機的 hosts 文件。
在這裏插入圖片描述

⑥ search 命令
search 命令支持對遠程目標機上的文件進行搜索,用參數 -h 查看幫助如下:
在這裏插入圖片描述
參數 -d 指定搜索的起始目錄或驅動,如果爲空將進行全盤搜索;參數 -f 指定搜索的文件或部分文件名,支持星號 (*) 匹配;參數 -r 遞歸搜索子目錄。
如下命令在目標主機的 C:\windows 目錄下搜索數據庫文件:
在這裏插入圖片描述

3. 網絡命令

① ipconfig 命令
ipconfig 命令用於獲取目標主機上的網絡接口信息:
在這裏插入圖片描述

② portfwd 命令
portfwd 命令是 Meterpreter 內嵌的端口轉發器,一班在目標主機開放的端口不允許直接訪問的情況下使用。比如說:目標主機開放的遠程桌面 3389 端口只允許內網訪問,這時可以使用 portfwd 命令進行端口轉發,以達到直接訪問目標主機的目的。
portfwd 的幫助信息如下:
在這裏插入圖片描述
假設目標機開放了 3389 端口,使用如下命令將其轉發到本地的 1234 端口:
portfwd add -l 1234 -p 3389 -r 10.10.10.130
在這裏插入圖片描述
可以看到本地的 1234 端口已經開放:
在這裏插入圖片描述
接下來就可以使用 BT5 的 rdesktop 命令連接本地 1234 端口,與遠程主機的 3389 端口建立連接。

③ route 命令
route 命令用於顯示目標主機的路由信息:
在這裏插入圖片描述

4. 系統命令

① ps 命令
ps 命令用於獲得目標主機上正在運行的進程信息:
在這裏插入圖片描述

② migrate 命令
使用 migrate 命令可以將 Meterpreter 會話從一個進程移植到另一個進程的內存空間中。可以把會話移植到穩定的系統服務進程中,如 explorer.exe。而且這種移植是無縫移植,不需要斷開已有的 TCP 連接再建立新的連接。
在這裏插入圖片描述
注:根據之前的 ps 命令可以獲取目標主機進程的進程號,可以查到 explorer.exe 的進程號爲 220。

③ execute 命令
execute 命令可以在目標機上執行文件。幫助信息如下:
在這裏插入圖片描述
下面的命令可以在目標機上隱藏執行 cmd.exe 程序:
execute -H -f cmd.exe
在這裏插入圖片描述
若去掉 -H 參數,則會在目標機上彈出 cmd 框。

若想直接與 cmd 進行交互,可以使用 -i 參數:
在這裏插入圖片描述
execute 命令的 -m 參數支持直接從內存中執行攻擊端的可執行文件:

④ getpid 命令
getpid 命令用於獲得當前會話所在進程的PID值:
在這裏插入圖片描述

⑤ kill 命令
kill 命令用於終結指定的 PID 進程
在這裏插入圖片描述

⑥ getuid 命令
getuid 命令用於獲得運行 Meterpreter 會話的用戶名,從而查看當前會話具有的權限:
在這裏插入圖片描述

⑦ sysinfo 命令
sysinfo 命令用於得到目標系統的一些信息,包括機器名、使用的操作系統等:
在這裏插入圖片描述

⑧ shutdown 命令
shutdown 命令用於關閉目標主機,同時 Meterpreter 會話也將被關閉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章