it-swarm.cn

如何在本地系统帐户下运行CMD.exe?

我目前正在运行Vista,我想手动完成与Windows服务相同的操作。由于Windows服务在本地系统帐户下运行,我想模仿这种相同的行为。基本上,我想在本地系统帐户下运行CMD.EXE。

我在网上找到了建议使用DOS任务计划程序AT命令运行CMD.exe的信息,但是我收到了Vista警告“由于安全性增强,此任务将在例外但不是交互式运行时运行。 “这是一个示例命令:

AT 12:00 /interactive cmd.exe

另一个解决方案建议通过服务控件(sc.exe)创建辅助Windows服务,该服务仅启动CMD.exe。

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

在这种情况下,服务无法启动并导致以下错误消息:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

第三个建议是通过计划任务启动CMD.exe。虽然您可以在各种帐户下运行计划任务,但我不认为本地系统帐户是其中之一。

我也尝试过使用Runas,但是我认为我遇到了与运行计划任务时相同的限制。

到目前为止,我的每一次尝试都以失败告终。有什么建议?

130
Ben Griswold

虽然我没有亲自测试,但我有充分的理由相信上面提到的AT COMMAND解决方案适用于XP,2000和Server 2003.根据我和Bryant的测试,我们已经确定了相同的方法不适用于Vista或Windows Server 2008 - 最常见的原因是增加了安全性并且/交互式交换机已被弃用。

但是,我遇到了这篇 文章 它演示了使用 PSTools 来自 SysInternals (这是微软于2006年7月收购的。)我通过以下方式启动了命令行,突然间我在魔术的本地管理员帐户下运行:

psexec -i -s cmd.exe

PSTools运行良好。它是一套轻量级,文档齐全的工具,可以为我的问题提供合适的解决方案。

非常感谢那些提供帮助的人。

202
Ben Griswold
  1. 从Sysinternals下载psexec.exe
  2. 将它放在C:\驱动器中。
  3. 以标准或管理员用户身份登录并使用以下命令:cd \。这会将您置于驱动器的根目录中,psexec位于该目录中。
  4. 使用以下命令:psexec -i -s cmd.exe其中-i用于交互式,-s用于系统帐户。
  5. 命令完成后,将启动cmd Shell。输入whoami;它会说'系统'
  6. 打开任务管理器。杀死Explorer.exe。
  7. 从提升的命令Shell类型start Explorer.exe
  8. 启动资源管理器时,请在开始菜单栏中注明名称“system”。现在你可以删除system32目录中的一些文件,作为管理员你不能删除或作为管理员你必须努力更改删除这些文件的权限。

尝试重命名或删除Windows任何受保护目录中的系统文件的用户应该知道所有Windows文件都受DACLS保护,同时重命名文件时必须更改所有者并替换拥有该文件的TrustedInstaller并使任何用户像用户一样属于管理员组作为文件的所有者,然后尝试在更改权限后重命名它,它将工作,当你运行带有内核特权的Windows资源管理器时,出于安全原因,你在网络访问方面有些限制,它仍然是一个研究课题让我回来

40
raven

找到答案 这里 似乎通过添加/ k start到binPath参数来解决问题。这样会给你:

sc create testsvc binpath= "cmd /K start" type= own type= interact

但是,Ben说这对他不起作用,当我在Windows Server 2008上尝试它时,确实在本地系统下创建了cmd.exe进程,但它不是交互式的(我看不到窗口)。

我不认为有一种简单的方法可以做你所要求的,但我想知道你为什么这样做呢?您是否只是想在运行服务时看到发生了什么?好像你可以只使用日志记录来确定发生了什么,而不必将exe作为本地系统运行...

10
Bryant

我建议你计算出服务真正需要的最小权限集,并使用它,而不是权限太大的本地系统上下文。例如, 本地服务

由于 session 0隔离 ,在Windows Vista和Windows Server 2008上,交互式服务不再起作用 - 或者至少不再显示UI。

6
Mike Dimmick

使用安全桌面将cmd.exe作为system运行

我们可以通过附加调试器轻松地通过Windows XP/Vista/7/8.1中的CMD获取内核访问权限:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. 以管理员身份运行CMD

  2. 然后在Elevated中使用此命令:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. 然后运行osk(onscreenkeyboard)。如果您通过流程资源管理器检查它仍然不能使用系统完整性级别运行,但如果您可以在服务会话中使用OSK,它将作为NT Authority\SYSTEM运行

所以我有想法你必须在安全桌面上运行它。

以Administrator身份启动任何文件。出现UAC提示时,只需按 Win+U 并启动OSK,它将启动CMD。然后在提升的提示符中键入whoami,您将获得NT Authority\System。之后,您可以从系统命令Shell启动Explorer并使用系统配置文件,但出于安全原因,您可以通过SYSTEM权限在网络上执行某些操作。我将在一年前发现它后添加更多解释。

简要说明这是如何发生的

在不使用PsExec的情况下在本地系统帐户下运行Cmd.exe。此方法运行之前发现的调试器陷阱技术,此技术有其自身的优点,可用于在调试器中捕获一些狡猾/恶意的蠕虫或恶意软件,并运行其他exe来代替暂停传播或损坏。这里这个注册表键在Windows本机调试器中捕获屏幕键盘并运行cmd.exe,但是cmd仍将以Logged on users权限运行,但是如果我们在session0中运行cmd,我们可以获得系统Shell。所以我们在这里添加另一个想法,我们跨越安全桌面上的cmd记住安全桌面在系统帐户下的会话0中运行,我们得到系统Shell。因此,无论何时运行任何高架,您都必须在黑暗,非交互式桌面上回答UAC提示和UAC提示,一旦看到它,您必须按 Win+U 然后选择OSK,您将在本地系统特权下运行CMD.exe。有更多方法可以使用CMD获取本地系统访问权限

3
raven

另一个替代方案是进程黑客,如果你进入运行...(交互不适用于具有安全性增强但不重要的人)并且当框打开时将服务放入框类型并将SYSTEM放入用户框并放入C :\ Users\Windows\system32\cmd.exe保留其余部分确定和boch你有一个带有cmd的窗口并运行系统现在为自己做其他步骤因为我建议你知道它们

3
James5001

还有另一种方式。有一个名为PowerRun的程序允许运行高架cmd。即使有TrustedInstaller权限。它允许控制台和GUI命令。

2
Alexander Haakan

我使用 RunAsTi utility来运行 TrustedInstaller (高权限)。即使在Windows的恢复模式(通过执行Shift + Restart输入的模式)中也可以使用该实用程序, psexec utility在那里不起作用。但是你需要将C:\WindowsC:\Windows\System32(不是X:\WindowsX:\Windows\System32)路径添加到PATH环境变量中,否则 RunAsTi 将无法在恢复模式下工作,它只会打印: SeTmpersonateName的AdjustTokenPrivileges:并非所有引用的权限或组都分配给调用者

0
anton_rh