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 计算机时,会创建两个单独的访问令牌:
在CMD.EXE创建进程(例如)时,会为其分配这两个访问令牌之一。如果进程以管理员身份“提升”运行,则使用未过滤的访问令牌。如果未授予该进程管理员权限,则使用过滤后的标准用户令牌。
一旦创建了进程,就无法替换其访问令牌。1在此 MSDN Application Security for Windows 桌面 线程中,自称是 Windows 内核团队成员的海报指出:
一旦进程开始运行,NT 内核从未打算允许令牌切换。这是因为句柄等可能已在旧的安全上下文中打开,进行中的操作可能使用不一致的安全上下文等。因此,一旦进程开始执行,切换进程的令牌通常没有意义。然而,这直到 Vista 才被强制执行。[重点矿山](来源感谢到@BenÑ)
注意:用户帐户控制是随着 Windows Vista 的发布引入的。
这个超级用户的回答引用了两个额外的来源,证实了这一点:
devzest.com 博客文章Programming Elevated Privilege/UAC:
代码只能在启动时在进程级别提升,这意味着无法提升正在运行的进程。为了提升现有应用程序,必须创建应用程序进程的新实例......
techtarget.com 文章如何使用 Vista 的 UAC 正确提升程序的权限:
程序一旦启动就无法提升...
因此,根本不可能就地提升命令提示符或任何其他进程。唯一的选择是使用新的访问令牌生成另一个进程(如果需要,它可以是原始进程的另一个实例)。在命令提示符的情况下,使用具有更高权限的访问令牌启动新实例总是会导致创建一个新窗口,如果系统上启用了 UAC 提示,它们也会被触发。
1您可以使用AdjustTokenPrivileges功能调整现有访问令牌中的权限,但根据 MSDN:
AdjustTokenPrivileges 函数无法向访问令牌添加新权限。它只能启用或禁用令牌的现有权限。
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,但它是最接近的。通过手动设置窗口布局,可以直接在原始窗口下方创建新窗口并与原始窗口相邻。
小智 14
是否有可以将命令提示符提升到位的命令?
有一个比较不方便的方法:
powershell -Command "Start-Process 'cmd.exe' -Verb runAs"
Run Code Online (Sandbox Code Playgroud)
有更好的方法,但微软关闭了它们。当然,您可以随时卷起袖子,编写自己的脚本,相当于sudo使用我刚刚给您的源代码。
换句话说,它不应产生新窗口或显示 UAC 提示。
亵渎!把他烧死!;)开玩笑,不。没有。那将是一个错误和一个安全漏洞。Microsoft 做出了明确的努力,以确保提升流程和标准流程的共同点尽可能少。
正在考虑两个后端(一个标准和一个提升)和一个图形前端的聪明孩子应该阅读Session 0 Isolation。
不应该可以提升跳过UAC的权限,否则就违反了Windows安全原则。
但有一些工具可以实现这一点。就像gsudoWindows 上的 sudo 一样,它允许将命令提示符提升到适当的位置。我是作者。
它显示第一个标高的 UAC 窗口。如果您gsudo在提高 gsudo 超时之前再次进行操作,它不会再次请求 UAC。
*nix sudo不是在新窗口中打开命令。gsudo在几分钟内调用多次,则只会显示一次 UAC 弹出窗口。gsudo md folder无需使用较长的形式gsudo cmd.exe /c md foldergsudo可用于需要提升一个或多个命令的脚本。(UAC 弹出窗口将出现一次)。gsudo dir | findstr /c:"bytes free" > FreeSpace.txt) 以及退出代码 ('%errorlevel%))。gsudo从已经提升的控制台调用(使用参数),它将只运行命令。gsudo因此,如果您调用从已提升的控制台使用的脚本,它也将起作用。UAC 弹出窗口不会出现。scoop install gsudochoco install gsudoPowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
Run Code Online (Sandbox Code Playgroud)
看看它的实际效果:

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