2

概述

The Process

用 C++ 编译并运行的 exe/dll

设想

  1. 登录(win 7)到标准用户帐户(无管理员)
  2. 以管理员身份运行The Process
  3. The Process使用ShellExecute打开一些应用程序(exe)

问题

应用在admin 用户范围内打开

期待

应用在标准用户范围内打开


解决方案

1. CreateProcessAsUser

使用CreateProcessAsUser(假设我设法hToken正确解决了问题)。

但是,我的呼叫失败,错误代码为1314 - ERROR_PRIVILEGE_NOT_HELD。回到文档告诉我:

如果此函数因 ERROR_PRIVILEGE_NOT_HELD (1314) 而失败,请改用 CreateProcessWithLogonW 函数

所以我深入研究并发现这个CreateProcessAsUser Error 1314不是很有帮助。

2. 模拟LoggedOnUser

使用ImpersonateLoggedOnUser生成相同的错误代码:1314 - ERROR_PRIVILEGE_NOT_HELD

3. CreateProcessWithLogonW

CreateProcessWithLogonW需要lpPassword我自然没有


问题

管理员进程如何在登录用户中打开应用程序?

4

2 回答 2

1

您是否尝试过使用文档CreateProcessWithTokenW中提到的哪个CreateProcessWithLogonW?它似乎需要比CreateProcessAsUser您应该拥有的特权(SE_IMPERSONATE_NAME而不是SE_ASSIGNPRIMARYTOKEN_NAME)弱得多的特权。

你说你已经有一个交互式用户的令牌,所以我不会进入它。

(注意:所有这些都报告了奇怪的错误,包括CreateProcessWithTokenW。不要放弃第一次尝试。错误和修复,例如:为什么 CreateProcessWithTokenW 失败并出现 ERROR_ACCESS_DENIED


hToken不是“权利”。这是一个令牌。错误说的是您缺乏特权

拥有特权不是基本权利!默认情况下,某些用户会获得某些特权。其他人需要通过本地安全策略(在 MMC 管理单元中的“用户权限分配”节点中或使用LsaAddAccountRights- 所有这些都记录在向帐户分配权限页面中)。

除此之外,您有时必须使用AdjustTokenPrivileges. 这记录在同级页面更改令牌中的权限中

如果您持有它们,某些 API 会启用它们。其他人不这样做,并要求您自己这样做。显而易见的方法是在调用和记录要求它的 API 之前启用特权。

MS 论坛链接可能没有,但错误消息很清楚。MSDN 说关于这个功能:

通常,调用CreateProcessAsUser 函数的进程必须具有SE_INCREASE_QUOTA_NAME权限,并且如果令牌不可分配,则可能需要SE_ASSIGNPRIMARYTOKEN_NAME权限。

错误是(来自您链接到的页面!):

ERROR_PRIVILEGE_NOT_HELD
  1314 (0x522)
  客户端未持有所需的权限。

于 2015-11-08T02:54:25.303 回答
0

这实际上是您想要完成的一项非常棘手的任务。有非常严格的安全政策,这使得它非常困难。

据我所知,您可以使用psexec来完成。它有一个命令行开关,可以实现用户交互,但以管理员身份运行进程。我认为您的命令应如下所示:

psexec \\target-computer -i -s [your command]

另一种方法是使用 WMI。但为此,您需要更改目标机器的安全设置(可能使用 GPO)。您需要使用模拟级别连接到目标机器,deletgate请参见此处。此外,如前所述,您需要更改安全设置。看这里

于 2015-11-05T16:48:35.070 回答