Leaked Handle Exploitation

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

简介

进程中的句柄允许访问不同的Windows资源

RootedCON2022 - 利用泄露句柄进行LPE

已经发生过几起特权升级案例,其中一个具有打开和可继承句柄特权进程运行了一个非特权进程,使其能够访问所有这些句柄

例如,想象一下,一个以SYSTEM身份运行的进程打开了一个新进程OpenProcess())并具有完全访问权限。同一进程还创建了一个新进程CreateProcess()权限较低,但继承了主进程的所有打开句柄。 然后,如果您对权限较低的进程具有完全访问权限,您可以获取使用OpenProcess()创建的特权进程的打开句柄注入shellcode

有趣的句柄

进程

如您在初始示例中所读,如果非特权进程继承了具有足够权限的特权进程的进程句柄,它将能够在其上执行任意代码

这篇优秀的文章中,您可以看到如何利用具有以下权限之一的任何进程句柄:

  • PROCESS_ALL_ACCESS

  • PROCESS_CREATE_PROCESS

  • PROCESS_CREATE_THREAD

  • PROCESS_DUP_HANDLE

  • PROCESS_VM_WRITE

线程

与进程句柄类似,如果非特权进程继承了具有足够权限的特权进程的线程句柄,它将能够在其上执行任意代码

这篇优秀的文章中,您还可以看到如何利用具有以下权限之一的任何进程句柄:

  • THREAD_ALL_ACCESS

  • THREAD_DIRECT_IMPERSONATION

  • THREAD_SET_CONTEXT

文件、密钥和节句柄

如果非特权进程继承具有对特权文件或注册表的写入等效权限句柄,它将能够覆盖文件/注册表(并且有很多运气的话,提升特权)。

节句柄类似于文件句柄,这些对象的常见名称是**“文件映射”。它们用于处理大文件**而无需将整个文件保存在内存中。这使得利用有点类似于利用文件句柄。

如何查看进程的句柄

Process Hacker

Process Hacker是一个可免费下载的工具。它具有几个令人惊叹的选项来检查进程,其中之一是查看每个进程的句柄的功能。

请注意,为了查看所有进程的所有句柄,需要SeDebugPrivilege(因此您需要以管理员身份运行Process Hacker)。

要查看进程的句柄,请右键单击进程并选择句柄:

然后,您可以右键单击句柄并检查权限

Sysinternals Handles

来自Sysinternals的Handles 二进制文件还将在控制台中列出每个进程的句柄:

LeakedHandlesFinder

此工具允许您监视泄露的句柄,甚至自动利用它们以提升特权。

方法论

现在您知道如何查找进程的句柄,您需要检查的是是否有非特权进程可以访问特权句柄。在这种情况下,进程的用户可能能够获取句柄并滥用它以提升特权。

Vulnerable Example

例如,以下代码属于一个Windows服务,存在漏洞。该服务二进制文件中的漏洞代码位于**Exploit函数内。该函数开始使用完全访问权限创建一个新的句柄进程**。然后,它创建一个低权限进程(通过复制_explorer.exe_的低权限令牌)执行_C:\users\username\desktop\client.exe_。漏洞在于它使用bInheritHandlesTRUE创建低权限进程

因此,这个低权限进程能够获取首先创建的高权限进程的句柄,并注入和执行一个shellcode(请参阅下一节)。

漏洞利用示例 1

在实际情况中,您可能无法控制由易受攻击的代码执行的二进制文件(在本例中为_C:\users\username\desktop\client.exe_)。您可能会** compromise 一个进程,然后需要查看是否可以访问任何特权进程的易受攻击句柄**。

在这个示例中,您可以找到一个可能的用于 C:\users\username\desktop\client.exe 的利用代码。 这段代码中最有趣的部分位于 GetVulnProcHandle。此函数将开始获取所有句柄,然后它将检查它们中是否有任何属于相同 PID 且句柄属于进程。如果所有这些要求都满足(找到一个可访问的打开进程句柄),它将尝试注入和执行 shellcode 以滥用进程的句柄。 shellcode 的注入是在**Inject函数内完成的,它将将 shellcode 写入特权进程并在同一进程内创建一个线程来执行 shellcode**。

漏洞利用示例 2

在实际情况中,您可能无法控制由易受攻击的代码执行的二进制文件(在本例中为_C:\users\username\desktop\client.exe_)。您可能会** compromise 一个进程,然后需要查看是否可以访问任何特权进程的易受攻击句柄**。

在这个示例中,不是滥用打开的句柄来注入和执行 shellcode,而是使用特权打开句柄进程的令牌来创建一个新的。这是在第 138 到 148 行完成的。

请注意,函数 UpdateProcThreadAttribute 是与属性 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS 和打开的特权进程句柄一起使用的。这意味着执行 _cmd.exe 的创建的进程线程将具有与打开句柄进程相同的令牌权限。

其他工具和示例

该工具允许您监视泄漏的句柄以查找易受攻击的句柄,甚至可以自动利用它们。它还具有一个用于泄漏句柄的工具。

另一个用于泄漏句柄并利用它的工具。

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式:

最后更新于