【问题标题】:user without password can be impersonated only if they are in admin group只有在管理员组中才能模拟没有密码的用户
【发布时间】:2019-12-05 12:12:04
【问题描述】:

目标是让服务创建一个进程,该进程具有密码未知的用户的安全上下文。 我理解并接受新进程只能访问本地资源的限制

我想我已经接近解决方案了。只要要模拟的用户在本地管理员组中,一切正常。 但如果不是,我会得到一个异常 0xc06d007e。 被模拟的用户似乎缺少它在管理员组中时所拥有的一些权限或特权。 但是,如果没有经过数千次排列的反复试验,我怎么能找出这个缺失的权利/许可/特权是什么

get a token for the user to  be impersonated 
token = new WindowsIdentity("username@domain").Token
create a primary token
token2 = duplicatetokenex(token)

要创建的进程是一个简单的控制台应用程序,实际上我什至不需要控制台。

process_creation_flags.DETACHED_PROCESS
| process_creation_flags.CREATE_NO_WINDOW
| process_creation_flags.CREATE_NEW_PROCESS_GROUP

尝试以模拟用户身份启动新进程

createprocessasuser(token2, "myapplication.exe" etc etc)`

正如我所说,如果用户名@域在本地管理员组中,这可以正常工作 否则我会得到异常 0xc06d007e 我认为当新进程尝试启动时

【问题讨论】:

    标签: windows impersonation createprocessasuser


    【解决方案1】:

    作为创建服务的步骤之一,我将代码作为控制台应用程序运行,并且在那个阶段我遇到了上述异常。

    但我发现将代码作为服务运行效果很好!!

    所以当从控制台应用程序完成模拟时,我从来没有发现为什么要被模拟的用户(被模拟者?)需要在本地管理员组中。 我怀疑这与会话和/或桌面有关。

    我没有发现很多关于该场景冒充您不知道密码的用户的讨论。因此,我只想再次向任何有问题的人保证,这确实是可能的,要点是: 1)将代码作为服务运行(使用本地系统或具有所有必需权限的用户) 2) 从 windowsidentity 获取 s4u 令牌(如果调用具有所需的权限,这将是一个模拟令牌) 3) 使用 duplicatetokenex 从模拟令牌创建一个主令牌 4) 使用来自 3 的令牌创建processasuser

    注意该进程只能访问本地资源

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多