【发布时间】:2017-03-26 18:56:54
【问题描述】:
我在 Windows Server 2008 R2 上授予标准用户“Joe”SeImpersonatePrivilege,这是网络上唯一的域控制器。 Joe 不是任何管理员组的成员;当 Joe 启动一个进程时,它以中等完整性级别运行。
当管理员在服务器上运行“gpresult /z”时,我看到了这个部分列表:
User Rights
-----------
GPO: Default Domain Controllers Policy
Policy: ImpersonatePrivilege
Computer Setting: Administrators
Joe
LOCAL SERVICE
NETWORK SERVICE
SERVICE
但是,当 Joe 运行一个使用 GetTokenInformation 和 LookupPrivilegeName 来显示 Joe 的权限的程序时,它会在服务器上产生以下结果:
Integrity level : Medium Process
SeShutdownPrivilege
SeChangeNotifyPrivilege
SeUndockPrivilege
SeIncreaseWorkingSetPrivilege
SeTimeZonePrivilege
Press any key to continue
这些在工作站上:
Integrity level : Medium Process
SeChangeNotifyPrivilege
SeIncreaseWorkingSetPrivilege
Press any key to continue
我想知道 Joe 在运行中型进程时是否可以拥有 SeImpersontatePrivilege,如果可以,如何实现。我的目标是让 Joe 在“Impersonate”级别模拟其他用户,而不是“Identify”,无论是在工作站还是服务器上运行,使用 Get/AcceptSecurityContext。对于有关该主题的背景阅读的任何建议,我将不胜感激。
【问题讨论】:
-
Joe 正在获取拆分令牌,请参阅 this earlier answer from Super User。不幸的是,GUI 在这种情况下不能很好地应对,我不知道 Joe 有任何非常明智的方式来运行具有模拟特权的进程。您可以通过编程方式进行操作as described here,但您需要用户名和密码。
-
另一方面,这不是一件很明智的事情。有一个 原因 特权受到审查。您对您的方案没有说太多,但正确的解决方案可能是重新设计,以便需要模拟的代码位于系统服务中。 (该服务不需要以管理员权限运行;UAC 不适用于服务。)
-
(顺便说一句,你得到的来自服务器的权限列表和来自工作站的权限列表是否混淆了?乔应该在工作站上拥有更多的权限,而不是更少。)
-
超级用户的绝佳链接,还有一个更好的链接 - 谢谢。我不认为乔得到了分裂令牌,但我也想要他。看起来他需要成为正确组的成员,默认情况下 std 用户不是。正如您所指出的,从这里开始,一个答案可能是一项服务;另一个可能是带有“highestAvailable”的清单。我会试验一下。在此应用程序中无法访问用户名/密码。
-
这一领域的感性概念似乎随着时间的推移而演变。从具有最低权限的进程开始,比如不访问任何服务等,然后通过模拟将它们提供给具有足够权限的客户,这曾经被认为是一种合理的方法。现在,相同的(标准用户 - 中等完整性)进程在不进行一些修改的情况下无法模拟,因此该方法不再有效。以标准用户身份运行服务和从 cmd 行以身份运行进程看起来很相似,但我确信有一些细微之处可以推荐该服务。
标签: windows impersonation