是否有可以将命令提示符提升到位的命令?

use*_*000 62 windows uac command-line

在 *nix 系统上,你可以获得一个 root shell,如下所示:

$ su # or 'sudo -s'
#
Run Code Online (Sandbox Code Playgroud)

根外壳在同一个终端中就地生成。

我正在尝试在 Windows 命令提示符上找到类似的就地提升的东西。换句话说,它不应产生新窗口或显示 UAC 提示。到目前为止,我已经能够制作一个绕过 UAC 的计划任务,但是没有生成提升的命令提示符窗口。

是否有类似的 Windows 命令可以在不生成新窗口的情况下进行就地提升?

I s*_*ica 68

TL;DR - 唯一的选择是产生另一个进程。(新的cmd.exe。)在命令提示符的情况下,使用具有更高权限的访问令牌启动新实例将始终导致创建一个新窗口


无法向已经运行的进程授予额外的权限。

当具有管理权限的用户登录到启用了用户帐户控制 (UAC) 的 Windows 计算机时,会创建两个单独的访问令牌

  1. 一个具有完全管理员访问权限,以及
  2. 具有标准用户访问权限的第二个“过滤令牌”

CMD.EXE创建进程(例如)时,会为其分配这两个访问令牌之一。如果进程以管理员身份“提升”运行,则使用未过滤的访问令牌。如果未授予该进程管理员权限,则使用过滤后的标准用户令牌。

一旦创建了进程,就无法替换其访问令牌1在此 MSDN Application Security for Windows 桌面 线程中,自称是 Windows 内核团队成员的海报指出:

一旦进程开始运行,NT 内核从未打算允许令牌切换。这是因为句柄等可能已在旧的安全上下文中打开,进行中的操作可能使用不一致的安全上下文等。因此,一旦进程开始执行,切换进程的令牌通常没有意义。然而,这直到 Vista 才被强制执行[重点矿山](来源感谢@BenÑ

注意:用户帐户控制是随着 Windows Vista 的发布引入的

这个超级用户的回答引用了两个额外的来源,证实了这一点:

因此,根本不可能就地提升命令提示符或任何其他进程。唯一的选择是使用新的访问令牌生成另一个进程(如果需要,它可以是原始进程的另一个实例)。在命令提示符的情况下,使用具有更高权限的访问令牌启动新实例总是会导致创建一个新窗口,如果系统上启用了 UAC 提示,它们也会被触发。


1您可以使用AdjustTokenPrivileges功能调整现有访问令牌中的权限,但根据 MSDN

AdjustTokenPrivileges 函数无法向访问令牌添加新权限。它只能启用或禁用令牌的现有权限。

  • 尝试 ['gsudo'](https://github.com/gerardog/gsudo),它允许在当前控制台中运行提升的命令。它产生一个提升的进程并将其内容流式传输到非提升的控制台。 (2认同)

AFH*_*AFH 18

虽然我是 的热心用户TCC-LE,但有一个不需要任何新程序的解决方案:-

  • cmd以管理员身份启动。
  • 这应该让你开始%SystemRoot%\system32\- 如果没有,那就在cd那里。
  • copy cmd.exe cmdadmin.exe(或您选择的任何名称,例如su.exe)。
  • 现在运行资源管理器并找到cmdadmin.exe.
  • 右键单击并选择属性
  • 兼容性选项卡中选择以管理员身份运行(或为所有用户设置)。

现在cmdadmin是您的suor sudo:您可以在不带参数的情况下启动它,为您提供具有管理权限的 shell,或者您可以运行它以/c在此模式下执行单个命令。根据您的政策,可能会或可能不会提示您进行确认。

请注意,这将始终打开一个新窗口(与 TCC 解决方案一样start /elevated ...):对于 GUI 应用程序,这是预期的,但对于命令行程序,您可能希望使用/k代替/c,以便您有机会看到输出; 或者您可以通过sudo.cmd连接& pause到运行字符串末尾的批处理文件(也许?)运行。

在任何一种情况下,它都与suor不太一样sudo,但它是最接近的。通过手动设置窗口布局,可以直接在原始窗口下方创建新窗口并与原始窗口相邻。

  • 我不是为了您的利益而提及安全隐患,而是为了其他读者。但是,我不同意禁用 UAC 提示并不比以管理员身份运行更糟糕。UAC 提示 *可以* 阻止以管理员身份登录的用户向进程授予不需要的管理权限。如果没有提示,用户将失去这个机会。 (2认同)

小智 14

是否有可以将命令提示符提升到位的命令?

有一个比较不方便的方法:

powershell -Command "Start-Process 'cmd.exe' -Verb runAs"
Run Code Online (Sandbox Code Playgroud)

有更好的方法,但微软关闭了它们。当然,您可以随时卷起袖子,编写自己的脚本,相当于sudo使用我刚刚给您的源代码。

换句话说,它不应产生新窗口或显示 UAC 提示。

亵渎!把他烧死!;)开玩笑,不。没有。那将是一个错误和一个安全漏洞。Microsoft 做出了明确的努力,以确保提升流程和标准流程的共同点尽可能少。

正在考虑两个后端(一个标准和一个提升)和一个图形前端的聪明孩子应该阅读Session 0 Isolation


Ger*_*oli 9

不应该可以提升跳过UAC的权限,否则就违反了Windows安全原则。

但有一些工具可以实现这一点。就像gsudoWindows 上的 sudo 一样,它允许将命令提示符提升到适当的位置。我是作者。

它显示第一个标高的 UAC 窗口。如果您gsudo在提高 gsudo 超时之前再次进行操作,它不会再次请求 UAC。

特征

  • 提升的命令显示在用户级控制台中,而*nix sudo不是在新窗口中打开命令。
  • 凭据缓存:如果gsudo在几分钟内调用多次,则只会显示一次 UAC 弹出窗口。
  • 支持CMD命令:(gsudo md folder无需使用较长的形式gsudo cmd.exe /c md folder
  • 如果从 PS shell 调用,则支持 PowerShell 命令。
  • 脚本编写:
    • gsudo可用于需要提升一个或多个命令的脚本。(UAC 弹出窗口将出现一次)。
    • 可以解释提升命令的输出和退出代码:例如,StdOutbound 可以通过管道传输或捕获 ( gsudo dir | findstr /c:"bytes free" > FreeSpace.txt) 以及退出代码 ('%errorlevel%))。
    • 如果gsudo从已经提升的控制台调用(使用参数),它将只运行命令。gsudo因此,如果您调用从已提升的控制台使用的脚本,它也将起作用。UAC 弹出窗口不会出现。

安装

  • 通过 Scoop 安装:scoop install gsudo
  • 通过 Chocolatey 安装:choco install gsudo
  • 或者:
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
Run Code Online (Sandbox Code Playgroud)

看看它的实际效果: gsudo 演示

Github 项目https://github.com/gerardog/gsudo