操作系统为启用了UAC的Windows 7或更高版本。调用进程具有管理员权限,已由UAC信箱确认。
我想在user SYSTEM下生成一个新的控制台窗口(cmd.exe) (不要问为什么)。我可以通过使用Sysinternals的PsExec工具或类似的工具来交互式地完成这项工作,但我没有源代码,我需要了解它是如何工作的。
我知道我必须调用CreateProcessAsUser(),这在第一个参数( hToken )设置为NULL的情况下可以很好地工作,但现在我需要知道如何获取hToken。我知道我可以通过调用LogonUser()来获得这样的令牌--但不能用于系统。如何获取系统的令牌?
我想使用DuplicateTokenEx(),但这需要一个原始的令牌,而我没有这个令牌。
我是否必须查询进程列表,查找任何系统进程,并尝试复制该令牌或其他什么?我不想对PsExec工具或其他执行此操作的工具进行反向工程。
发布于 2012-11-26 06:06:13
通常,您将安装并启动一个配置为以SYSTEM身份登录的服务。然后,您可以使用OpenProcessToken
和DuplicateTokenEx
制作令牌的副本。
您可能需要使用SetTokenInformation
来更改令牌的会话ID,以便与交互式用户的会话ID相匹配。要做到这一点,您需要“作为操作系统的一部分”权限,因此您应该在服务本身内部执行此操作。一旦准备好使用重复的令牌,就可以使用DuplicateHandle
将句柄复制到管理进程中,或者(使用正确的选项)也可以直接从服务启动命令外壳。
发布于 2014-08-18 04:15:13
或者,使用最大允许访问权限打开winlogon进程,尝试打开进程令牌(也使用最大允许访问权限),然后尝试使用模拟权限复制此winlogon句柄。在win8.1上,这将会成功。在其他情况下,您需要临时更改令牌dacl,使用null或您自己的管理进程令牌
https://stackoverflow.com/questions/13553615
复制相似问题