【问题标题】:Given a username and password, how do you impersonate that user elevated?给定一个用户名和密码,你如何冒充该用户?
【发布时间】:2013-10-03 17:35:18
【问题描述】:

在 Windows Vista 及更高版本中,LogonUser 返回一个非特权令牌,即使提供的用户是管理员也是如此。因此,当您使用该令牌进行模拟时,您不会被提升。给定管理员用户的正确用户名和密码,您如何运行对该管理员具有提升权限的代码?

【问题讨论】:

  • 您是要模拟 AD 帐户还是本地帐户?
  • Active Directory,主要是 - 但如果它也适用于本地,那就太好了!

标签: c# impersonation elevated-privileges


【解决方案1】:

如果您正在编写 Windows 服务,只要您要模拟的用户具有“作为服务登录”权限,使用 LOGON32_LOGON_SERVICE 而不是 LOGON32_LOGON_INTERACTIVELOGON32_LOGON_NEW_CREDENTIALS 将产生特权令牌。

这并没有提供一个通用的解决方案(如果你正在编写一个面向用户的应用程序,它不会起作用),但足以解决我遇到的具体问题。

【讨论】:

    【解决方案2】:

    我刚刚与this example 合作过,它实际上工作正常。 我想如果你想在这个上下文中运行代码,你必须通过以下方式设置当前线程主体:

    Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(WindowsIdentity.GetCurrent());
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2010-09-11
      • 1970-01-01
      • 2020-09-07
      • 2013-01-22
      • 2016-01-28
      • 2020-02-15
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多