使用CreateProcessAsUser和CREATE_SUSPENDED

时间:2016-01-29 16:11:58

标签: c++ windows security winapi code-injection

我有一个服务(在会话0中作为NT AUTHORITY \ SYSTEM运行)。它使用CreateProcessAsUser创建两个子进入当前用户会话(在会话1中作为域\用户运行)。

孩子1我们会打电话给注射器,孩子2我们会打电话给注射器

使用CREATE_SUSPENDED进程创建标志暂停创建

注入 Injector 针对注入调用CreateRemoteThreadCreateRemoteThread以8(ERROR_NOT_ENOUGH_MEMORY)失败,经过一些谷歌搜索,它实际上与权限相关。

如果注射刚刚运行,那么注射器可以针对注射器流程成功调用CreateRemoteThread来自用户帐户(CreateProcessCREATE_SUSPENDED来自用户帐户)。

如果从用户帐户运行注射器,则它不能{<1}}针对注射器子项,但可以针对注射器是从用户帐户运行的。

希望这个图表能够更容易地形象化:)

CreateRemoteThread

有趣的是,如果删除了// With CREATE_SUSPENDED // Session 0 ----------- // | Service | // ----------- // // \\ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Session 1 // \\ // // \\ // ------------ N ------------ N ------------ // | Injector | ----> | Injectee | <---- | Injector | // ------------ ------------ ------------ // \ / // \ Y ------------ Y / // ---> | Injectee | <--- // ------------ 标记,则所有CREATE_SUSPENDED方案都会成功,但我需要使用CreateRemoteThread

CREATE_SUSPENDED

使用来自SYSTEM / session 0的// Without CREATE_SUSPENDED // Session 0 ----------- // | Service | // ----------- // // \\ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Session 1 // \\ // // \\ // ------------ Y ------------ Y ------------ // | Injector | ----> | Injectee | <---- | Injector | // ------------ ------------ ------------ // \ / // \ Y ------------ Y / // ---> | Injectee | <--- // ------------ 必须有一些细微差别,这意味着孩子继承了拒绝CreateProcessAsUser访问的内容,但我不知道是什么。

我正在使用CreateRemoteThread所有默认参数。 MSDN说&#34;默认安全描述符是hToken参数&#34;中引用的用户的描述符,并且令牌由WTSQueryUserToken获得,是当前用户的。

使用Process Explorer查看两种注入类型的安全属性会显示完全相同的信息。

这让我发疯,这可能是什么?

0 个答案:

没有答案