通过查找非权限进程中的泄漏句柄来查找权限提升和UAC
发布时间:2022-04-15 15:08 所属栏目:53 来源:互联网
导读:在某些情况下,具有高完整性或系统完整性的进程会向权限进程/线程/令牌请求句柄,然后生成低完整性进程。如果这些句柄足够强大,且类型正确,并且由子进程继承,我们可以从另一个进程复制它们,然后滥用它们来升级权限或绕过UAC。在这篇文章中,我们将介绍如
在某些情况下,具有高完整性或系统完整性的进程会向权限进程/线程/令牌请求句柄,然后生成低完整性进程。如果这些句柄足够强大,且类型正确,并且由子进程继承,我们可以从另一个进程复制它们,然后滥用它们来升级权限或绕过UAC。在这篇文章中,我们将介绍如何寻找和滥用这种漏洞。 本质上,这个想法是看看我们是否可以自动找到拥有高完整性(也就是提升)或SYSTEM进程的权限句柄的非权限进程,然后检查我们是否可以作为一个非权限用户附加到这些进程上,并复制这些句柄,以便以后滥用它们。我们的工具会受到哪些限制? 1.它必须作为中等完整性进程运行; 2. 进程令牌中没有 SeDebugPrivilege(中等完整性的进程默认没有这个权限); 3. 没有 UAC 绕过,因为它也必须适用于非管理用户; 这个过程有点复杂,我们将经历的步骤或多或少如下: 1.枚举所有进程持有的所有句柄; 2.过滤掉我们不感兴趣的句柄,现在我们只关注进程、线程和令牌的句柄,因为它们更容易被武器化; 3.过滤掉引用低完整性进程/线程/令牌的句柄; 4.过滤掉完整性大于中等的进程持有的句柄,除非获得SeDebugPrivilege,否则我们不能附加到它们上,这违背了本文的目的; 5.复制其余的句柄并将它们导入我们的进程,并试图滥用它们来升级权限或者至少绕过UAC; 它需要3个参数: dwDesiredAccess是一个DWORD,它指定了我们希望对我们试图打开的进程拥有的访问级别; bInheritHandle是一个布尔值,如果设置为TRUE,将使句柄可继承,这意味着调用进程在子进程生成时将返回的句柄复制给子进程(以防我们的程序调用CreateProcess之类的函数); dwProcessId是一个DWORD,用于指定我们想打开哪个进程(通过提供它的PID); 在下一行中,我将尝试打开系统进程(它始终具有 PID 4)的句柄,向内核指定我希望句柄拥有尽可能少的特权,只需要查询有关信息的子集进程(PROCESS_QUERY_LIMITED_INFORMATION),并且我希望该程序的子进程继承返回的句柄(TRUE)。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读