如何使用父级的继承句柄创建提升的子进程

时间:2017-09-20 13:00:50

标签: c++ winapi parent-child

我正在尝试使用Windows中提升的权限创建子进程(通过触发UAC提示)并让此子进程继承其父STDOUT句柄,以便能够输出回父级控制台。

Additionnal Infos:

  • Win32 API
  • 我目前正在使用ShellExecuteEx()ShellExecuteInformation来指定一个“runas”动词来触发UAC,但是任何其他解决方案都可以创建当前正在运行的程序的高架副本(子进程是与父级相同的可执行文件)但是能够输出回父级控制台。

1 个答案:

答案 0 :(得分:1)

value error:ShellExecuteEx一起使用时 - 函数runas不是来自您的流程,而是来自CreateProcessAsUserW正在运行的svchost.exe -k netsvcs。并且 bInheritHandles 被硬编码为 FALSE - 所以 在这种情况下,您的进程不会继承任何句柄。要使句柄可继承,唯一的方法是使用主要提升标记直接调用appinfo.dll。但是从哪里得到这个标记?好的,您可以将第二次自我exe作为提升(使用CreateProcessAsUserW)并将提升的令牌复制回原始未提升的进程。但无论如何(即使使用提升的令牌) - 您需要runas权限才能拨打SE_ASSIGNPRIMARYTOKEN_NAME。但你没有这个特权。

否则你可以找到一些漏洞。

CreateProcessAsUser返回的流程句柄没有ShellExecuteEx访问权限 - 因此您以后不能将其用于手动处理重复。

总的来说 - 这在设计上是不可能的