一个进程是否可以在没有管理权限的情况下将代码注入另一个进程?

时间:2013-01-27 23:44:08

标签: windows security winapi cryptoapi dpapi

DPAPI中的CryptProtectMemory API允许您传递CRYPTPROTECTMEMORY_SAME_PROCESS标志,以防止其他进程解密内存。解决此问题的一种方法是使用OpenProcessWriteProcessMemoryCreateRemoteThread将代码注入目标进程并让其调用CryptUnprotectMemory,从而解密内存并将其泄漏到另一个过程。

假设两个进程在Windows Vista或更高版本的同一受限特权用户(即非管理员)的上下文中运行,这仍然可行吗?我的印象是,无论进程ACL如何,进程内存写入操作都被拒绝限制用户,但我可能错了。

2 个答案:

答案 0 :(得分:2)

Windows尊重进程ACL,默认情况下,这允许访问正在运行进程的用户以及本地系统帐户和用户的登录会话SID。管理员可以使用SeDebugPrivilege绕过此ACL。

否则,您需要成为管理员才能调试自己的代码。

您可以更改进程ACL,但由于正常(IIRC)当前用户是进程所有者,因此我不确定您是否可以阻止当前用户上下文中的其他进程将其更改回来。此外,由于进程可能在同一桌面上运行,因此无论如何都会受到shatter attacks的限制。

答案 1 :(得分:2)

您没有描述需要使用代码注入的确切方案。如果在没有管理权限的情况下运行的ope进程创建了另一个关于CreateProcess的进程,例如,对具有所有权限PROCESS_ALL_ACCESShProcess PROCESS_INFORMATION)的新进程进行一次获取处理。您可以阅读here,例如以下

  

CreateProcess函数返回的句柄有    PROCESS_ALL_ACCESS 访问流程对象。

因此,应该只保留从CreateProcess返回的处理程序,并且在您需要完全访问子进程之前不要关闭它。通过这种方式,您将拥有调用CreateRemoteThreadWriteProcessMemory所需的PROCESS_CREATE_THREAD,PROCESS_QUERY_INFORMATION,PROCESS_VM_OPERATION,PROCESS_VM_WRITE和PROCESS_VM_READ访问权限。

因此,您的问题的答案将是:“是的,在某些其他条件下,这是可能的。”