使用UAC进行远程模拟

时间:2013-06-19 11:44:04

标签: c# uac impersonation

我有一个用C#编写的工具,可以模拟用户在远程计算机上执行管理任务。

我发现在模拟远程计算机的内置管理员帐户时,或模拟管理员组中的域用户时,使用带有LOGON32_PROVIDER_DEFAULT的LOGON32_LOGON_NEW_CREDENTIALS会使UAC失败。但是,当模拟非内置本地用户(远程计算机的本地用户)时,将返回非提升的令牌。在两台计算机上创建具有相同凭据的用户无法缓解此问题。

此表显示成功获取在远程计算机上使用的提升令牌:

graph showing working scenarios http://img521.imageshack.us/img521/3605/fo69.png

所有用户都在管理员组中。

是否有解决此问题的方法,不涉及关闭UAC或在目标计算机上执行任何繁重操作?远程计算机由客户控制,无法进行任何修改。假设UAC是并且应该在两端运行。

作为一个兴趣点而不是减损上述问题,使用远程WMI时会发现完全相同的行为。

1 个答案:

答案 0 :(得分:0)

这可能是因为远程服务器启用了UAC。这意味着当您连接到远程计算机时,即使您是管理员,当您在远程计算机上操作时也会被剥夺这些权限。

有一个Group Policy option that controls this

  

<强> LocalAccountTokenFilterPolicy

修改:修正了指向正确知识库文章的链接“Windows Vista中用户帐户控制和远程限制的说明”

至于为什么它只适用于本地管理员,而不适用于域管理员?因为这是该选项的作用 - 它只限制“本地管理员组的成员”

  

拥有域用户帐户的用户远程登录到Windows Vista计算机...,域用户将使用远程计算机上的完全管理员访问令牌运行,并且UAC将不会生效。

VS

  

如果作为目标远程计算机上本地管理员组成员的用户建立了远程管理连接...,则他们将无法以完全管理员身份进行连接。

该政策将域管理员帐户与本地管理员帐户区别对待。这就是它与众不同的原因。

尝试禁用组策略并查看是否修复了该策略。它似乎完全描述了你的情况。尝试禁用远程计算机上的组策略选项

  

要禁用UAC远程限制,请按照下列步骤操作:

     
      
  1. 点击开始,点击运行,输入 regedit ,然后按ENTER。
  2.   
  3. 找到并单击以下注册表子项:
        HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System
  4.   
  5. 如果LocalAccountTokenFilterPolicy注册表项不存在,请按照下列步骤操作:

         

    一个。在修改菜单上,指向新建,然后点击 DWORD值
      湾键入 LocalAccountTokenFilterPolicy ,然后按ENTER键。

  6.   
  7. 右键点击 LocalAccountTokenFilterPolicy ,然后点击修改

  8.   
  9. 值数据框中,键入 1 ,然后点击确定
  10.   
  11. 退出注册表编辑器。
  12.