PsExec 是什么
PsExec 是 Sysinternals 工具集里最有名的远程执行工具:它把一个小服务程序推到远端,用服务方式启动命令,因此不依赖 WinRM,也不要求对端开启远程管理。它还能以 SYSTEM 身份运行、把本地程序拷到远端执行、多机批量下发。代价是落地过程与勒索软件的横向移动手法高度相似,容易被 EDR 拦。
基本信息
| 适用平台 | Windows 客户端与服务器;需 Sysinternals 授权 |
|---|---|
| 前提 | ADMIN$ 管理共享可达 + 目标管理员凭据;开放 445 端口 |
| 常用参数 | -s 以 SYSTEM 运行;-c 拷贝本地程序到远端执行;-d 不等待;-u/-p 指定凭据 |
| 首次运行 | -accepteula 跳过许可协议,便于脚本化 |
典型使用场景
- 快速验证:WinRM/防火墙没配好之前,用 PsExec 直接跑一条命令确认链路
- 需要 SYSTEM 权限的操作:某些驱动、注册表或服务级任务只有 SYSTEM 能完成
- 批量执行本地脚本:把 bat 或 exe 拷到多台机器上运行
- 老环境运维:Windows 2003/2008 时代遗留环境里最常用的远程执行方式
- 排障取证:在目标机上以高权限运行 Process Explorer、Autoruns 等工具
常用示例
常用示例
psexec \\web01 -accepteula cmd /c "ipconfig /all > C:\temp\ip.txt"
:: 以 SYSTEM 身份后台执行
psexec \\web01 -s -d cmd /c "sc query wuauserv"
:: 把本地脚本拷到远端执行
psexec \\web01 -c cleanup.bat
:: 多机批量(先从主机名清单文件读)
psexec @hosts.txt -d -accepteula cmd /c "gpupdate /force"
:: 指定其他凭据
psexec \\web01 -u DOMAIN\ops -p ****** cmd /c whoami常见报错对照
| 报错 | 原因 | 处理方向 |
|---|---|---|
| Access is denied | 凭据不足或非管理员 | 确认管理员组与被 UAC 远程限制拦截的可能 |
| 找不到网络路径 | ADMIN$ 不可达或 445 被拦 | 检查防火墙、文件共享服务与 SMB 版本 |
| 找不到文件 | 远端工作目录在 system32 | 写绝对路径或先 cd |
| EDR 告警/被拦 | 服务落地行为被判可疑 | 事先与安全团队报备并留工单 |
PsExec 的行为与攻击者的横向移动几乎一致:往目标机写服务程序并以 SYSTEM 启动。被终端防护告警是正常现象,生产环境使用前先和安全团队沟通,避免封锁与误判。
远端程序有图形界面时要用 -i 指定交互会话,否则窗口在会话 0 里看不见;无人值守场景更稳的做法是把输出重定向到文件,事后再读取回来。