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
    2
    net use \\目标主机\ipc$ /user:目标主机\AdminUser 密码
    dir \\目标主机\ADMIN$

    若仍然 Access is denied,说明连接或凭据有问题。


2. UAC 远程凭据过滤(导致管理员权限降级)

  • Windows 默认会对远程登录的本地 Admin 账号进行权限剥离。

  • 可在 目标机注册表中设置:

  • cmd命令:

    1
    2
    3
    4
    5
    6
    7
    reg 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

✅ 综合实施步骤

推荐按照以下顺序排查:

  1. 确认 Admin$ 共享正常访问

    1
    2
    net use \\远程机\ipc$ /user:远程机\Admin 密码
    dir \\远程机\ADMIN$
  2. 若失败,检查 UAC 过滤是否生效,设置上述注册表。

  3. 确保防火墙、文件共享设置正确。

  4. 使用提升参数 -h 和/或 -i

  5. 完整执行示例:

    1
    psexec -h -i \\远程机 -u 域\用户名 -p 密码 cmd.exe