2

操作系统是启用了 UAC 的 Windows 7 或更高版本。调用过程具有管理员权限,已由 UAC 框确认。

我想在用户 SYSTEM 下生成一个新的控制台窗口(cmd.exe)(不要问为什么)。我可以使用 Sysinternals 的 PsExec 工具或类似工具以交互方式执行此操作,但我没有源代码,我需要了解它是如何工作的。

我知道我必须调用 CreateProcessAsUser() 并且在第一个参数 (hToken) 设置为 NULL 时可以正常工作,但现在我需要知道如何获取 hToken。我知道我可以通过调用 LogonUser() 来获得这样的令牌 - 但不能用于 SYSTEM。我将如何获得 SYSTEM 的令牌?

我想过使用 DuplicateTokenEx(),但这需要一个我没有的原始令牌。

我是否必须查询进程列表,找到任何 SYSTEM 进程并尝试复制该令牌或其他什么?我不想对 PsExec 工具或其他这样做的工具之一进行反向工程。

4

2 回答 2

3

通常,您会安装并启动一项服务,并配置为以 SYSTEM 身份登录。然后,您可以使用OpenProcessTokenDuplicateTokenEx制作令牌的副本。

您可能需要使用SetTokenInformation更改令牌的会话 ID 以匹配交互式用户的会话 ID。您需要充当操作系统的一部分权限才能执行此操作,因此您应该从服务本身内部执行此操作。准备好使用重复令牌后,您可以使用DuplicateHandle将句柄复制到管理进程中,或者(使用正确的选项)您也可以直接从服务启动命令 shell。

于 2012-11-25T22:06:12.667 回答
0

或者以最大允许访问权限打开 winlogon 进程,尝试打开进程令牌(也以最大允许权限),然后尝试使用模拟权限复制此 winlogon 句柄。在win8.1上这将成功。在其他情况下,您需要使用 null 或您自己的管理进程令牌临时更改令牌 dacl

于 2014-08-17T20:15:12.707 回答