天天看點

如何使用 PSEXEC 在遠端計算機上運作指令

作者:勞資丶蜀道三

PsExec 是一個有用的系統管理者工具,允許您在遠端計算機上執行指令和運作程式。 PsExec 的殺手級功能是它允許管理者與遠端計算機建立互動式會話,并使用它遠端運作程式,并執行任何指令(在背景或以互動模式)。 PsExec 僅提供控制台的指令行界面,可用作輕量級的 telnet 替代品。

如何使用 PSEXEC 在遠端計算機上運作指令

使用 PsExec 的先決條件

PsExec 必須滿足以下要求才能連接配接到遠端計算機:

遠端計算機必須打開 TCP/445 (SMB) 和 UDP/137 (NETBIOS) 端口,并且應在 Windows Defender 防火牆中啟用檔案和列印機共享例外。建議僅為專用網絡和域網絡配置檔案打開這些端口,以降低安全風險。

您可以在 Windows Defender 防火牆設定 (GUI) 中或使用以下指令在遠端計算機上允許檔案和列印機共享功能:

Set-NetFirewallRule -DisplayGroup “File And Printer Sharing” -Enabled True -Profile Private

如何使用 PSEXEC 在遠端計算機上運作指令

您的帳戶必須具有目标遠端計算機上的本地管理權限;

LanmanServer 和 LanmanWorkstation 服務必須在遠端主機上運作:

get-service LanmanServer , LanmanWorkstation

必須在遠端計算機上啟用預設的 admin$ 共享。

確定 ADMIN%(遠端管理)和其他 Windows 管理共享(C$、IPC$)已在遠端計算機上釋出:

net view \DESKTOP-U97VIM5/all

如何使用 PSEXEC 在遠端計算機上運作指令

確定 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 在遠端計算機上運作指令

某些防病毒軟體可能會将 Psexec.exe 檢測為惡意軟體、PUA(可能不需要的應用程式)、黑客工具或遠端管理工具。如果您是從 Microsoft 網站下載下傳的,則可以確定 PsExec 不包含病毒。然而,PsExec 經常被病毒和黑客用來利用安全漏洞并遠端控制受感染的計算機。

如果您尚未指定使用者名和密碼,PsExec 程序将使用您目前的憑據在遠端計算機上啟動。從版本 2.1 開始,PsExec 在通過網絡傳輸時對使用者憑據進行加密(在以前的版本中,密碼以明文形式發送)。

首次運作 PsExec 時,您必須接受 Sysinternals 許可協定。

如何使用 PSEXEC 在遠端計算機上運作指令

為了防止顯示圖形許可協定提示,您可以在第一次運作 PsExec 時添加 /accepteula 開關。

psexec /accepteula

在以下示例中,我們将使用 PSExec 重新整理遠端計算機 lon-srv01 上的 DNS 緩存:

psexec \lon-srv01 ipconfig /flushdns

如何使用 PSEXEC 在遠端計算機上運作指令

如果程式的路徑中有空格,則必須将其用雙引号引起來:

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 在遠端計算機上運作指令

要停止互動式 PsExec 會話,請運作以下指令:

Exit

添加 -nobanner 選項以隐藏每次運作 psexec 時出現的版權消息:

如何使用 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 允許您同時在多台遠端計算機上運作該指令。為此,您可以設定以逗号分隔的計算機名稱:

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% 共享。

如何使用 PSEXEC 在遠端計算機上運作指令

確定可以通過 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 并将傳回代碼設定為零。

繼續閱讀