PsExec 访问被拒绝问题排查和解决
PsExec 访问被拒绝问题排查和解决
使用 PsExec(来自 Sysinternals 套件)执行远程命令时,如果没有管理员权限,默认情况下会失败,尤其是当目标命令需要提升权限(如写注册表、操作系统服务、访问系统目录等)时。
✅ 1. PsExec 的权限需求
PsExec 默认需要:
- 目标机器的管理员账号或管理员组成员
- 远程系统的“文件和打印机共享”开启
- 远程注册表服务开启
- 允许远程执行服务(PsExec 会在目标机器上临时安装并运行
PSEXESVC.exe)
如果你使用非管理员账号,比如普通用户,则会遇到:
1 | Access is denied. |
或
1 | Error establishing communication with PsExec service on [目标主机] |
🚫 非管理员账号无法做的事情
如果你不是管理员用户:
- 无法安装 PsExec 的服务到远程主机
- 无法通过 SMB 建立 IPC 通道
- 无法启动目标服务进程
所以 PsExec 不支持用非管理员权限在远程主机执行命令。
✅ 2. 排查问题
使用管理员账号,但仍然无法通过 PsExec 成功执行远程命令
1. 访问 ADMIN$ 共享 被拒绝
PsExec会先通过 SMB 连接\\目标主机\ADMIN$(对应远程 Windows 的C:\Windows)。若该共享被禁用、网络防火墙拦截,或 UAC 远程安全策略干扰,就会拒绝访问。
排查步骤:
1
2net use \\目标主机\ipc$ /user:目标主机\AdminUser 密码
dir \\目标主机\ADMIN$若仍然
Access is denied,说明连接或凭据有问题。
2. UAC 远程凭据过滤(导致管理员权限降级)
Windows 默认会对远程登录的本地 Admin 账号进行权限剥离。
可在 目标机注册表中设置:
cmd命令:
1
2
3
4
5
6
7reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v PromptOnSecureDesktop /t REG_DWORD /d 0 /f设置后重启目标 Windows,恢复完整管理员访问。
3. 防火墙或共享服务未启用
- 确保 目标主机启用了“文件和打印机共享”,端口 445 可用。
- Windows 防火墙可能阻止
psexecsvc.exe的执行,检查日志或临时关闭防火墙试试。
4. 提升权限 & 显示交互界面
在 UAC 环境中(Vista 及以上系统),即便使用管理员账号也需手动提升:
1
psexec -h \\目标主机 cmd.exe
参数
-h会运行提升后的令牌。若需在会话桌面交互,可加
-i(带上-h):1
psexec -h -i \\目标 主机 cmd.exe
✅ 综合实施步骤
推荐按照以下顺序排查:
确认 Admin$ 共享正常访问:
1
2net use \\远程机\ipc$ /user:远程机\Admin 密码
dir \\远程机\ADMIN$若失败,检查 UAC 过滤是否生效,设置上述注册表。
确保防火墙、文件共享设置正确。
使用提升参数
-h和/或-i。完整执行示例:
1
psexec -h -i \\远程机 -u 域\用户名 -p 密码 cmd.exe
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FrankTest!
评论
