PsExec 是一個有用的系統管理者工具,允許您在遠端計算機上執行指令和運作程式。 PsExec 的殺手級功能是它允許管理者與遠端計算機建立互動式會話,并使用它遠端運作程式,并執行任何指令(在背景或以互動模式)。 PsExec 僅提供控制台的指令行界面,可用作輕量級的 telnet 替代品。
使用 PsExec 的先決條件
PsExec 必須滿足以下要求才能連接配接到遠端計算機:
遠端計算機必須打開 TCP/445 (SMB) 和 UDP/137 (NETBIOS) 端口,并且應在 Windows Defender 防火牆中啟用檔案和列印機共享例外。建議僅為專用網絡和域網絡配置檔案打開這些端口,以降低安全風險。
您可以在 Windows Defender 防火牆設定 (GUI) 中或使用以下指令在遠端計算機上允許檔案和列印機共享功能:
Set-NetFirewallRule -DisplayGroup “File And Printer Sharing” -Enabled True -Profile Private
您的帳戶必須具有目标遠端計算機上的本地管理權限;
LanmanServer 和 LanmanWorkstation 服務必須在遠端主機上運作:
get-service LanmanServer , LanmanWorkstation
必須在遠端計算機上啟用預設的 admin$ 共享。
確定 ADMIN%(遠端管理)和其他 Windows 管理共享(C$、IPC$)已在遠端計算機上釋出:
net view \DESKTOP-U97VIM5/all
確定 ADMIN%(遠端管理)和其他 Windows 管理共享(C$、IPC$)已在遠端計算機上釋出:
如果遠端計算機上的管理者共享清單為空,請在遠端計算機上運作以下指令來釋出預設管理者共享:
reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /f /v AutoShareWks /t REG_DWORD /d 0
然後重新啟動遠端計算機。
您還必須禁用遠端 UAC,這會阻止工作組計算機上管理者帳戶的遠端通路:
reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 1 /f
如何在 Windows 上安裝 PsExec?
要使用 PsExec 工具,隻需從 Microsoft 下載下傳 PSTools.zip 存檔并将 PsExec64.exe 和 PsExec.exe 檔案解壓到管理者計算機的任何檔案夾中(可以友善地将其複制到預設可執行檔案夾 C:WindowsSystem32 )。
您現在可以使用 PsExec 連接配接到遠端計算機。
PsExec 的文法如下:
psexec \RemotePCName [-u username[-p password]] command [arguments]
您隻需在指令行中鍵入 psexec(不帶任何參數)即可列出所有可用的 PsExec 選項。
某些防病毒軟體可能會将 Psexec.exe 檢測為惡意軟體、PUA(可能不需要的應用程式)、黑客工具或遠端管理工具。如果您是從 Microsoft 網站下載下傳的,則可以確定 PsExec 不包含病毒。然而,PsExec 經常被病毒和黑客用來利用安全漏洞并遠端控制受感染的計算機。
如果您尚未指定使用者名和密碼,PsExec 程序将使用您目前的憑據在遠端計算機上啟動。從版本 2.1 開始,PsExec 在通過網絡傳輸時對使用者憑據進行加密(在以前的版本中,密碼以明文形式發送)。
首次運作 PsExec 時,您必須接受 Sysinternals 許可協定。
為了防止顯示圖形許可協定提示,您可以在第一次運作 PsExec 時添加 /accepteula 開關。
psexec /accepteula
在以下示例中,我們将使用 PSExec 重新整理遠端計算機 lon-srv01 上的 DNS 緩存:
psexec \lon-srv01 ipconfig /flushdns
如果程式的路徑中有空格,則必須将其用雙引号引起來:
psexec \lon-srv01 "c:\Program Files (x86)app1app.exe"
PsExec 如何工作?
PsExec 将 psexesvc.exe 檔案複制到遠端計算機的隐藏管理檔案夾 Admin$ (C:WindowsSystem32psexesvc.exe);
然後它通過 Windows 服務控制管理器 API 啟動遠端計算機上的 PSEXESVC 服務;
您的本地 PsExec 程序使用命名管道連接配接到遠端 PSEXESVC 服務,将您的指令發送到遠端計算機,并等待結果;
該指令的文本輸出将發送到您的計算機,并且錯誤代碼将顯示在您的控制台中。如果指令成功,您将看到退出代碼 0。
任務完成後,PsExec 會停止服務并自動将其從遠端計算機中删除。
暗示。如果按 Ctrl-C 鍵結束遠端 PsExec 會話,PSEXESVC 服務不會自動删除。您可以使用以下指令手動删除此服務:
sc.exe \lon-srv01 delete psexesvc
當您在遠端使用者下通過 PsExec 以互動方式運作 cmd.exe 時,在啟用 UAC 時,您無法提升權限(作為管理者)。要使用帳戶的提升令牌運作指令,請使用 –h 選項。此選項導緻 PsExec 會話中的所有指令以“以管理者身份運作”模式運作。
PsExec 用法示例
讓我們看一些使用 PsExec 在遠端計算機上執行指令的有用示例。
要重新啟動遠端計算機,請運作以下指令:
psexec \lon-srv01 "cmd.exe" "/c shutdown /f /r/ /t 60"
如果需要一一運作多個指令,最好在遠端計算機上以互動模式運作 PsExec。為此,請運作指令:
psexec \lon-srv01 cmd
這将打開一個互動式指令提示符。您在控制台中鍵入的所有指令都将在遠端 lon-srv01 計算機上執行。
要停止互動式 PsExec 會話,請運作以下指令:
Exit
添加 -nobanner 選項以隐藏每次運作 psexec 時出現的版權消息:
要使用特定帳戶連接配接到遠端計算機并運作互動式 shell,請使用以下指令:
psexec.exe \lon-srv01 -u user -p password cmd.exe
您甚至可以使用 PsExec 遠端運作 PowerShell 指令。例如,以下指令将傳回遠端計算機上 C:PS 目錄的大小:
psexec \lon-srv01 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:PS | measure Length -Sum).Sum/1MB)"
-c 參數允許您指定要複制并在遠端計算機上運作的本地檔案的名稱。例如:
psexec \lon-srv01 -c c:psmyapp.exe
您可以使用 PsExec 作為遠端安裝軟體的最簡單方法。例如,您有某個程式的安裝程式檔案(例如 setup.msi)。要将 msi 檔案複制到遠端計算機并安裝它,請使用以下一行:
psexec.exe \lon-srv01 -c setup.msi –i –s "msiexec.exe /i setup.msi"
預設情況下,PsExec 不允許在遠端使用者的桌面上啟動 GUI 程式。 PsExec 以隐藏模式執行指令(您在執行指令的遠端計算機上看不到任何視窗或對話框)。但是,您可以使用 -i 選項更改此設定。
例如,以下 PsExec 指令将打開遠端計算機上的 notepad.exe 程序并将其顯示在使用者桌面上:
psexec -i \lon-srv01 notepad
然後,PsExec 将等待遠端計算機上完成此過程。
PsExec 将等待遠端計算機上運作的程序完成。如果遠端使用者不關閉桌面上的記事本視窗,您的 PsExec 程序将無限期地等待它完成。您可以使用 -d 開關來阻止 PsExec 等待遠端程序完成:
psexec -i -d \lon-srv01 notepad
使用 PsExec 以本地系統帳戶運作指令
PsExec 有一個有趣且有用的功能。您可以使用 -s 開關在 SYSTEM 帳戶下運作本地計算機上的任何指令或程式。例如,運作 CLI 會話:
psexec -s cmd
使用 whoami 指令檢查您目前登入的使用者。如您所見,控制台是從 NTAuthoritySystem 帳戶啟動的。
如何使用 PsExec 在多台遠端計算機上運作指令
PsExec 允許您同時在多台遠端計算機上運作該指令。為此,您可以設定以逗号分隔的計算機名稱:
psexec \PC1,PC2,PC3,PC33 “ipconfig /all”
或者将計算機清單儲存到文本檔案(每行一個主機名),然後指定該檔案的路徑:
psexec @c:pscomputer_list.txt ipconfig
如果您輸入星号 (psexec \*) 而不是計算機名稱,則該指令将在域中的所有計算機上執行(您隻能在加入域的計算機上使用此技巧)。
例如,以下指令會将 run.bat 檔案複制到文本檔案 c:pscomputer_list.txt 中列出的所有計算機,并執行此批處理(-h 參數用于運作提升的批處理):
PsExec.exe @c:pscomputer_list.txt -h -u .administrator -p $upper0P@$ -c "c:psrun.bat"
常見 PsExec 錯誤
PsExec 通路被拒絕錯誤
在某些情況下,嘗試使用 PsExec 連接配接遠端計算機時可能會出現以下錯誤:
無法通路計算機名
找不到網絡路徑
確定在 computername 上啟用預設的 admin% 共享。
確定可以通過 SMB(TCP 端口 445)通過網絡通路遠端計算機。您可以使用以下 Test-NetConnection PowerShell 指令測試與遠端計算機的連接配接:
Test-NetConnection -ComputerName pc99 -Port 445
檢查指令響應。如果 TcpTestSucceeded 不等于 True,則表示該端口被防火牆阻止。
如果您的帳戶沒有遠端 Windows 主機的本地管理者權限,則會出現錯誤:
無法安裝/啟動 PSEXESVC 服務:
拒絕通路
PsExec:登入失敗
連接配接到遠端計算機時,可能會出現以下 PsExec 錯誤:
PsExec 無法在 PCName 上啟動 cmd.exe:
登入失敗:尚未授予使用者在此計算機上請求的登入類型。
在這種情況下,您需要将以下選項添加到 PsExec 指令中:
PsExec.exe -i –h PCName yourcommand
PSExec 錯誤代碼 1
如果當您在遠端計算機上運作批處理檔案時 PsExec 傳回“錯誤代碼 1”,則您很可能在 bat 檔案中使用了 exit 指令。将退出指令更改為
exit / b 0
此類指令将終止批處理檔案、關閉 cmd.exe 并将傳回代碼設定為零。