如何获取Windows系统用户令牌

如何获取Windows系统用户令牌,windows,psexec,createprocessasuser,auth-token,Windows,Psexec,Createprocessasuser,Auth Token,操作系统为启用UAC的Windows 7或更高版本。调用进程具有管理员权限,已由UAC框确认 我想在用户系统下生成一个新的控制台窗口(cmd.exe)(不要问为什么)。我可以通过使用Sysinternals中的PsExec工具或类似的工具以交互方式实现这一点,但我没有源代码,我需要了解它是如何工作的 我知道我必须调用CreateProcessAsUser(),并且在第一个参数(hToken)设置为NULL时可以正常工作,但现在我需要知道如何获取hToken。我知道我可以通过调用LogonUser

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

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

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

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


我是否需要查询进程列表,查找任何系统进程并尝试复制该令牌或其他什么?我不想对PsExec工具或其他任何一个工具进行反向工程来完成这项工作。

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


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

或者使用最大允许访问权限打开winlogon进程,尝试打开进程令牌(也使用最大允许访问权限)然后尝试使用模拟权限复制此winlogon句柄。在win8.1上,这将成功。在其他情况下,您需要临时更改令牌dacl,如果您不想对其进行编程,则需要使用null或您自己的管理进程令牌搜索“runassystem”。我仍然建议您安装自己的服务,而不是使用系统进程,但如果由于某种原因无法实现,这听起来是一个可行的替代方案。请注意,启用备份和还原权限会绕过大多数权限检查,所以在这种情况下它也可以工作,并且可以避免危险地干扰DACL。如果您必须处理DACL,绝对不要使用空DACL-这会引入安全漏洞。