当作为本地系统运行时,有没有办法运行 PsExec 指定用户名和密码(-u -p)?

Jes*_*sse 7 windows-server-2003 local-system pstools

我有一个在 Windows Server 2003 上作为本地系统运行的 Windows 服务,我正在尝试使用 PsExec 作为另一个用户(使用-u -p参数)运行命令,但我不断收到Access is denied. PsExec could not start错误消息。

可以执行以下操作来复制问题:

C:\Documents and Settings\me>PsExec.exe -s cmd

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\WINNT\system32>whoami
nt authority\system

C:\WINNT\system32>PsExec.exe -u DOMAIN\my-user -p mypass cmd

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

Access is denied.
PsExec could not start cmd:
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,第一个 PsExec 命令 ( PsExec.exe -s cmd) 会给你一个命令行作为本地系统。然后第二个 PsExec 命令 ( PsExec.exe -u DOMAIN\my-user -p mypass cmd) 抛出我试图解决的错误。

任何帮助将不胜感激!先感谢您!

I s*_*ica 8

PSEXEC.EXE以 LocalSystem 帐户启动第一个实例后,在命令中包含本地计算机的 IP 地址以启动第二个 PSEXEC 实例,如下所示:

PSEXEC.EXE \\LocalComputerIPAddress -u DOMAIN\my-user -p mypass CMD
Run Code Online (Sandbox Code Playgroud)


解释

您遇到的行为是由于 Windows Server 2003 的 Service Pack 1 添加了一项名为Loopback Check Functionality的新安全功能。根据链接的 MSKB 文章:

[安装 Service Pack 1] 后,当您尝试在以下通用命名约定 (UNC) 路径中使用完全限定域名 (FQDN) 或其 CNAME 别名在本地访问服务器时,会遇到身份验证问题:

    \\servername\sharename
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您会遇到以下症状之一:

  • 您会收到重复的登录窗口。
  • 您收到“拒绝访问”错误消息。
  • 您收到“没有网络提供商接受给定的网络路径”错误消息。
  • 事件 ID 537 记录在安全事件日志中。

这篇文章提出了两种解决方案(除了我上面提供的解决方法),两者都涉及将注册表编辑为:1)添加可在 NTLM 身份验证请求中引用的主机名,或 2)禁用身份验证环回检查,有效将服务器返回到 SP1 之前的行为。

根据 WindowsITPro.com 这篇关于PSEXEC 工作原理的文章:

PsExec 在远程系统上启动一个可执行文件并控制该可执行文件进程的输入和输出流,以便您可以从本地系统与该可执行文件进行交互。PsExec 通过从其可执行映像中提取名为 Psexesvc 的嵌入式 Windows 服务并将其复制到远程系统的 Admin$ 共享来实现此目的。

因此,即使您在本地计算机上运行 PSEXEC,它ADMIN$仍然使用共享,因此您遇到上述环回检查功能行为更改的原因。