gpt4 book ai didi

windows - LogonUser -> 来自系统服务的 CreateProcessAsUser

转载 作者:可可西里 更新时间:2023-11-01 13:36:40 33 4
gpt4 key购买 nike

我已经阅读了 Stack Overflow 上关于 CreateProcessAsUser 的所有帖子,但很少有已解决的问题,所以我不会在这个问题上屏住呼吸。但似乎我肯定遗漏了一些东西,所以这可能很容易。

目标操作系统是 Windows XP。我有一个作为“本地系统”运行的服务,我想从中创建一个作为不同用户运行的进程。对于该用户,我有用户名和密码,因此 LogonUser 运行良好,我为该用户获取了一个 token (在本例中为管理员帐户)。然后我尝试使用该 token 调用 CreateProcessAsUser,但它失败了,因为该 token 不附带 SeAssignPrimaryTokenPrivilege - 但是,它确实具有 SeIncreaseQuotaPrivilege。 (我使用 GetTokenInformation 转储与该 token 关联的所有权限。)根据 CreateProcessAsUser 的 MSDN 页面,您需要这两种权限才能成功调用 CreateProcessAsUser。

如果传递给 CreateProcessAsUser() 的 token 是“调用进程的主 token 的受限版本”,它还表示您不需要 SeAssignPrimaryTokenPrivilege,我可以使用 CreateRestrictedToken() 创建它,但随后它会与本地系统用户相关联,而不是我尝试以其身份运行进程的目标用户。

那么我如何创建一个登录 token ,它既是调用进程主 token 的受限版本,又与不同的用户相关联?谢谢!

请注意,此处不需要用户交互 - 都是无人值守的 - 因此无需执行诸如获取 WINSTA0 等操作。

最佳答案

SE_ASSIGNPRIMARYTOKEN_NAME是您可以在您的进程/线程中使用 OpenProcessToken/OpenThreadToken+LookupPrivilegeValue+AdjustTokenPrivileges 启用的特权(很容易将其与 TOKEN_ASSIGN_PRIMARY 混淆,MSDN 表示您需要同时将主 token 附加到进程)

在这台 XP:SP2 机器上,只需调用 LogonUser(...,LOGON32_LOGON_INTERACTIVE,...)+CreateProcessAsUser 就可以正常工作,不会影响任何权限(使用伪造的 cmd.exe 服务,但这应该无关紧要)

MSDN 上的这段引述:

If the necessary privileges are not already enabled, CreateProcessAsUser enables them for the duration of the call

而且您以 SYSTEM 身份运行并且应该能够启用任何权限这一事实使我相信分配主要内容不是问题。

关于windows - LogonUser -> 来自系统服务的 CreateProcessAsUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967742/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com