2012-11-25 46 views
2

启用UAC时,操作系统为Windows 7或更高版本。呼叫过程具有管理员权限,已由UAC框确认。如何获取Windows SYSTEM用户令牌

我想在用户系统下产生一个新的控制台窗口(cmd.exe)(不要问为什么)。我可以通过使用Sysinternals的PsExec工具或类似的工具交互地完成这个工作,但是我没有源代码,我需要了解它的工作原理。

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

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

我必须查询进程列表,找到任何SYSTEM进程,并尝试获取该令牌重复或什么?我不想对PsExec工具进行反向工程,或者其他人正在做这件事。

+0

如果您不想对其编程,请搜索“runassystem”。 – ChristianWimmer

回答

3

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

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

0

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

+0

我仍然会建议安装自己的服务,而不是使用系统进程,但如果由于某种原因而无法实现,这听起来像是一个可行的选择。请注意,启用备份和恢复权限可以绕过大多数权限检查,因此它在这种情况下也可以正常工作,并且可以帮助您避免与DACL发生危险的混淆。如果你必须弄乱DACL,绝对不要使用空DACL--这会引发安全漏洞。 –