第一次親密接觸MSF
Metasploit Framework介紹
Metasploit是一款開源安全漏洞檢測工具,附帶數百個已知的軟件漏洞,並保持頻繁更新。被安全社區冠以“可以黑掉整個宇宙”之名的強大滲透測試框架。
專業術語
滲透攻擊(Exploit),指由攻擊者或滲透測試者利用一個系統、應用或服務中的安全漏洞,所進行的攻擊行為。 攻擊載荷(Payload),是我們期望目標系統在被滲透攻擊之后去執行的代碼。 Shellcode,是在滲透攻擊是作為攻擊載荷運行的一組機器指令,通常用匯編語言編寫。 模塊(Module),指Metasploit框架中所使用的一段軟件代碼組件,可用於發起滲透攻擊或執行某些輔助攻擊動作。 監聽器(Listener),是Metasploit中用來等待網絡連接的組件。
模塊
模塊分類
auxiliary encoders exploits nops payloads post
模塊是通過Metasploit框架所裝載、集成並對外提供的最核心的滲透測試功能實現代碼。分為輔助模塊(Aux)、滲透攻擊模塊(Exploits)、后滲透攻擊模塊(Post)、攻擊載荷模塊(payloads)、編碼器模塊(Encoders)、空指令模塊(Nops)。這些模塊擁有非常清晰的結構和一個預定義好的接口,並可以組合支持信息收集、滲透攻擊與后滲透攻擊拓展。
輔助模塊--auxiliary
執行信息收集、枚舉、指紋探測、掃描等功能的輔助模塊(沒有payload的exploit模塊)
在滲透信息搜集環節提供了大量的輔助模塊支持,包括針對各種網絡服務的掃描與查點、構建虛假服務收集登錄密碼、口令猜測等模塊。此外,輔助模塊中還包括一些無須加載
攻擊載荷,同時往往不是取得目標系統遠程控制權的滲透攻擊,例如:拒絕服務攻擊。
編碼器模塊--encoders
對payload進行加密,躲避AV檢查的模塊
攻擊載荷與空指令模塊組裝完成一個指令序列后,在這段指令被滲透攻擊模塊加入邪惡數據緩沖區交由目標系統運行之前,Metasploit框架還需要完成一道非常重要的工序--
--編碼。 編碼模塊的第一個使命是確保攻擊載荷中不會出現滲透攻擊過程中應加以避免的”壞字符“。 編碼器第二個使命是對攻擊載荷進行”免殺“處理,即逃避反病毒軟件、IDS入侵檢測系統和IPS入侵防御系統的檢測與阻斷。
滲透攻擊模塊--exploits
利用發現的安全漏洞或配置弱點對遠程目標系統進行攻擊,以植入和運行攻擊載荷,從而獲得對目標系統訪問控制權的代碼組件。metasploit框架中滲透攻擊模塊可以按照所
利用的安全漏洞所在的位置分為主動滲透攻擊與被動滲透攻擊兩大類。 主動滲透攻擊:所利用的安全漏洞位於網絡服務端軟件與服務端軟件承載的上層應用程序之中,由於這些服務通常是在主機上開啟一些監聽端口並等待客戶端連接,通過連接目
標系統網絡服務,注入一些特殊構造的包含“邪惡”攻擊數據的網絡請求內容,觸發安全漏洞,並使得遠程服務進行執行“邪惡”數據中包含的攻擊載荷,從而獲取目標系統的控制
會話。針對網絡服務端的主動滲透攻擊屬於傳統的滲透攻擊。還有web應用程序滲透攻擊、SCADA工業控制系統服務滲透攻擊。
空指令模塊--nops
提高payload穩定性及維持大小
空指令(NOP)是一些對程序運行狀態不會造成任何實質影響的空操作或無關操作指令,最典型的空指令就是空操作,在X86 CPU體系結構平台上的操作碼是ox90. 在滲透攻擊構造邪惡數據緩沖區時,常常要在真正要執行的Shellcode之前添加一段空指令區,這樣當觸發滲透攻擊后跳轉執行ShellCode時,有一個較大的安全着陸區,
從而避免受到內存地址隨機化、返回地址計算偏差等原因造成的ShellCode執行失敗,提高滲透攻擊的可靠性。
攻擊載荷模塊--payloads
攻擊載荷是在滲透攻擊成功后促使目標系統運行的一段植入代碼,通常作用是為滲透攻擊者打開在目標系統上的控制會話連接。在傳統的滲透代碼開發中,攻擊載荷只是一段功
能簡單的ShellCode代碼,以匯編語言編制並轉換為目標系統CPU體系結構支持的機器代碼,在滲透攻擊觸發漏洞后,將程序執行流程劫持並跳轉入這段機器代碼中執行,從而
完成ShellCode中實現的單一功能。 metasploit攻擊載荷模塊分為獨立(Single)、傳輸器(Stager)、傳輸體(Stage)三種類型。 獨立攻擊載荷是完全自包含的,可直接獨立地植入目標系統進行執行,比如“windows/shell_bind_tcp"是適用於Windows操作系統平台,能夠將Shell控制會話綁定在指定
TCP端口上的攻擊載荷。在一些比較特殊情況下,可能會對攻擊載荷的大小、運行條件有所限制,比如特定安全漏洞利用時可填充邪惡攻擊緩沖區的可用空間很小、windows 7
等新型操作系統所引入的NX(堆棧不可執行)、DEP(數據執行保護)等安全防御機制,在這些場景情況下,Metasploit提供了傳輸器和傳輸體配對分階段植入的技術,由滲透
攻擊模塊首先植入代碼精悍短小且非常可靠的傳輸器載荷,然后在運行傳輸器載荷時進一步下載傳輸體載荷並執行。
后滲透模塊--post
主要支持在滲透攻擊取得目標系統遠程控制權之后,在受控系統中進行各種各樣的后滲透攻擊動作,比如獲取敏感信息,進一步括展,實施跳板攻擊等。
基本使用
Metasploit三種用戶接口(MSF終端、MSF命令行、Armitage)
Armitage:圖形界面
Metasploit框架中的armitage組件是一個完全交互式的圖形化用戶接口。
msfcli 使用接口,現在已經更新至 msfconsole -x
MSF終端以一種用戶友好的模式來提供交互方式,用於訪問軟件所有的功能特性,而msfcli則主要考慮腳本處理和其他命令行工具的互操作性。最新版本:msfcli被整合進ms
fconsole的參數里。
例如: 老指令: msfcli multi/samba/usermap_scriptPAYLOAD=cmd/unix/bind_netcat RHOST=192.168.200.129E 新指令: msfconsole -x "use exploit/multi/samba/usermap_script; set RHOST 192.168.200.129; set PAYLOAD cmd/unix/bind_netcat;[set LHOST IP;] r
un"
msfconsole 使用接口
最流行的用戶接口 幾乎可以使用全部 msf 功能 控制台命令支持 TAB 自動補全 支持外部命令的執行(系統命令等)
啟動前的准備
使用前先升級:msfupdate
啟動msf
在啟動msf時使用的參數選項
通用選項: -E, --environment ENVIRONMENT 設置Rails環境,默認為RAIL_ENV環境變量或'生產' 數據庫選項: -M, --migration-path DIRECTORY 指定包含其他數據庫遷移的目錄 -n, --no-database 禁用數據庫支持 -y, --yaml PATH 指定一個包含數據庫設置的YAML文件 框架選項: -c FILE 加載指定的配置文件 -v, -V, --version 顯示版本 模塊選項: --defer-module-loads 除非明確詢問,否則推遲模塊加載 -m, --module-path DIRECTORY 加載一個額外的模塊路徑 控制台選項: -a, --ask 在退出Metasploit之前詢問或接受'退出-y' -H, --history-file FILE 將命令歷史記錄保存到指定的文件 -L, --real-readline 使用系統Readline庫而不是RbReadline -o, --output FILE 輸出到指定的文件 -p, --plugin PLUGIN 在啟動時加載插件 -q, --quiet 不要在啟動時顯示 banner 信息 -r, --resource FILE 執行指定的資源文件( - 用於stdin) -x, --execute-command COMMAND 執行指定的控制台命令(使用;用於倍數) -h, --help 顯示此消息
MSF控制台命令
常用命令
banner 每次顯示不同的小貼士
color 高亮顯示模塊名字
connect 連接指定ip指定端口上的服務(connect -h可以獲取詳細參數)
show show 顯示給定類型的模塊或所有模塊(auxiliary / exploits / payloads / encoders / nops)
search 搜索指定關鍵字
---search name:mysql / platform:aix / type:aux / author:aaron / cve:2011 / 可多條件同時搜索
use 使用模塊
show 在使用模塊的情況下show顯示(options / payload / targets / advanced / evasion / missing)
info 顯示有關一個或多個模塊的信息
back 返回從當前上下文返回
Check 檢查模塊能不能被利用,就是檢查目標系統有沒有這個漏洞(大部分模塊不能執行這個命令)
exit 退出msf
set 設置參數
unset 取消設置的參數
setg 設置全局參數,所有模塊有這個參數就已經被設置(只在本次啟動msf使用有效)
unsetg 取消全局設置
save 保存當前設置的參數
Run 執行模塊
exploit 執行模塊
jobs 查看所有后台任務
kill 殺掉進程
load 加載其他插件
unload 卸載載入的插件
loadpath 加載某個目錄的插件(一般用於使用自己編寫模塊)
Sessions 查看會話、切換會話
route 通過指定session路由流量
例子:route add 10.1.1.0 255.255.255.0 4
resource 配置流程
例子:msfconsole -r a.rc
a.rc里面的內容就是使用模塊的配置
MSF數據庫命令
沒有進入msf前可以執行的關於數據庫的命令
msfdb init 初始化數據庫 msfdb reinit 刪掉以前初始化的數據庫,然后重新初始化數據庫 msfdb delete 刪掉現在的數據庫 msfdb start 啟動數據庫 msfdb stop 關掉數據庫
注意: MSF數據庫有問題 可以重新初始化數據庫 msfdb reinit 沒必要重新安裝MSF 另外msf自帶數據庫為postgresql
進入msf后可以執行的關於數據庫的命令
db_status 查看連接數據庫的狀態
db_rebuild_cache 重建數據庫緩存(重建的是msf各種模塊的信息,一般用在初始化數據庫后)
db_nmap 集成nmap工具,可以在msf里使用nmap,命令格式和使用nmap一樣,結果保存到數據庫
db_disconnect 斷開與當前數據庫的連接
db_connect 連接其它數據庫
kali自帶數據庫的位置:--/usr/share/metasploit-framework/config/database.yml
db_import 數據庫的導入
例子:db_import /root/bak.xml
注意:
配合namp使用,生成xml文件,也可以導入到msf數據庫
例子:nmap -A 192.168.12.3 -oX nmap.xml
db_import /root/namp.xml
db_export 數據庫的導出
例子:db_export -f xml /root/bak.xml
hosts 查看數據庫中所有主機信息
例子:hosts -c address,os_flavor
hosts -S Linux
host 查看指定ip的信息
例子:host 1.1.1.1
services 查看所有主機開放端口情況
例子:services -p 80
services -c info,name -p 1-1000
creds 查看所有破解的服務信息
vulns 查看所有測試出來的漏洞信息
loot 查看所有獲取的hash值
注意:我們在啟動msf時,會自動啟動后台數據庫,如果你在使用db_status命令發現數據庫沒有連接。
數據庫是用來存儲我們測試過程中的結果,沒有數據庫也能使用,但是肯定體驗感極差!!!
執行下面的語句啟動msf數據庫:
service postgresql start
msfdb start
netstat -pantu | grep 5432
核心命令
============= 命令 描述 ------- ----------- ? 幫助菜單 banner 顯示一個很棒的metasploit橫幅 cd 更改當前的工作目錄 color 切換高亮顯示顏色 connect 連接與主機通信 exit 退出退出控制台 get 獲取特定於上下文的變量的值 getg 獲取全局變量的值 grep Grep另一個命令的輸出 help 幫助菜單 history 歷史顯示命令歷史 irb 進入irb腳本模式 load 加載一個框架插件 quit 退出控制台 route 路由通過會話路由流量 save 保存保存活動的數據存儲 sessions 會話轉儲會話列表並顯示有關會話的信息 set 將特定於上下文的變量設置為一個值 setg 將全局變量設置為一個值 sleep 睡眠在指定的秒數內不執行任何操作 spool 將控制台輸出寫入文件以及屏幕 threads 線程查看和操作后台線程 unload 卸載卸載框架插件 unset 取消設置取消設置一個或多個特定於上下文的變量 unsetg 取消設置取消設置一個或多個全局變量 version 版本顯示框架和控制台庫版本號 模塊命令 =============== 命令 描述 ------- ----------- advanced 高級顯示一個或多個模塊的高級選項 back 返回從當前上下文返回 edit 編輯使用首選編輯器編輯當前模塊或文件 info 顯示有關一個或多個模塊的信息 loadpath 加載路徑搜索並加載路徑中的模塊 options 選項顯示全局選項或一個或多個模塊 popm 將最新的模塊從堆棧彈出並使其處於活動狀態 previous 將之前加載的模塊設置為當前模塊 pushm 將活動或模塊列表推入模塊堆棧 reload_all 重新加載所有定義的模塊路徑中的所有模塊 reload_lib 從指定路徑加載庫文件 search 搜索搜索模塊名稱和說明 show 顯示給定類型的模塊或所有模塊 use 使用按名稱選擇模塊 工作命令 ============ 命令 描述 ------- ----------- handler 處理程序作為作業啟動負載處理程序 jobs 作業顯示和管理作業 kill 殺死一份工作 rename_job 重命名作業 資源腳本命令 ======================== 命令 描述 ------- ----------- makerc 保存從開始到文件輸入的命令 resource 運行存儲在文件中的命令 數據庫后端命令 ========================= 命令 描述 ------- ----------- db_connect 連接到現有的數據庫 db_disconnect 斷開當前數據庫實例 db_export 導出包含數據庫內容的文件 db_import 導入掃描結果文件(文件類型將被自動檢測) db_nmap 執行nmap並自動記錄輸出 db_rebuild_cache 重建數據庫存儲的模塊緩存 db_status 顯示當前的數據庫狀態 hosts 列出數據庫中的所有主機 loot 列出數據庫中的所有戰利品 notes 列出數據庫中的所有注釋 services 列出數據庫中的所有服務 vulns 列出數據庫中的所有漏洞 workspace 在數據庫工作區之間切換 憑證后端命令 ============================ 命令 描述 ------- ----------- creds 列出數據庫中的所有憑據(密碼)