HackSys 极易受攻击的驱动程序 (HEVD) – BufferOverflowNonPagedPoolNx 漏洞


HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

介绍

此存储库包含HackSys Extreme Vulnerable Driver (HEVD)中的 BufferOverflowNonPagedPoolNx 漏洞的利用。该利用针对 Windows 10 版本 22H2(OS Build 19045.3930),并演示了一种从低完整性进程到 SYSTEM 的权限提升技术。

漏洞概述

该漏洞利用BufferOverflowNonPagedPoolNx 漏洞,通过NonPagedPoolNx 区域中的Aligned Chunk Confusion创建“幽灵块”。然后操纵该幽灵块以实现任意读写原语,随后用于提升权限。

关键技术:

  1. 在 NonPagedPoolNx 中使用对齐块混淆创建幽灵块,从而允许通过前一个块泄漏和操纵HEAP_VS_CHUNK_HEADER、POOL_HEADER和PipeQueueEntry结构。

  2. 通过操纵幽灵块中的 PipeQueueEntry 结构来设置伪造的PipeQueueEntrySub ,从而建立任意读取原语。

  3. 通过改变幽灵块中的 POOL_HEADER 结构来设置假的 ProcessBilled,从而建立任意减量原语。

  4. 通过将当前线程的KTHREAD结构中的PreviousMode清零来建立任意写入原语。

  5. 通过修改当前进程的EPROCESS结构中的 Token 来提升到 SYSTEM 权限。

  6. 通过操纵幽灵块及其链接块的 HEAP_VS_CHUNK_HEADER 结构来防止检测到损坏的块,从而稳定系统并避免 BSoD。

测试环境

此漏洞在以下环境中进行了测试:

  • Windows 10 版本 22H2(操作系统内部版本 19045.3930)

  • KVA 影子:已启用

  • VBS/HVCI:已禁用VBS/HVCI: Disabled

  • 完整性级别:低

演示:

HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

详细的利用步骤

1.建立任意读取原语:

  • 利用 HEVD 的 NonPagedPoolNx 缓冲区溢出来破坏相邻块的 POOL_HEADER,从而创建一个幽灵块:

  • 设置 CacheAligned 位并操作 PreviousSize 来控制块定位。

  • 释放后,这会创建一个与前一个块重叠的幽灵块。

  • 幽灵块的 HEAP_VS_CHUNK_HEADER、POOL_HEADER 和 PipeQueueEntry 与前一个块的数据重叠。

  • 从前一个块的 PipeQueue 读取会泄露幽灵块的结构。

  • 写入前一个块会操纵幽灵块的结构。

  • 用伪造的 PipeQueueEntry 覆盖幽灵块,将 linkedIRP 指向用户模式伪造的 PipeQueueEntrySub。

  • 将 PipeQueryEntrySub 的 data_ptr 设置为所需的读取地址。

  • 使用 PeekNamedPipe 从指定地址触发读取。

2.泄漏内核信息:

  • 使用任意读取原语来获取内核基地址、ExpPoolQuotaCookie 和其他关键地址。

  • 查找当前进程的EPROCESS结构。

3.建立任意减量原语:

  • 使用PipeAttribute在内核空间中创建一个伪 EPROCESS 结构。

  • 操作ghost chunk的POOL_HEADER:

  • 设置 PoolQuota 位以使内核将标头的一部分解释为 ProcessBilled 指针。
  • 设置一个假的 ProcessBilled 指针,计算如下:
  • ProcessBilled = addrof(fake EPROCESS) ⊕ addrof(Ghost Chunk) ⊕ ExpPoolQuotaCookie
  • 配置伪 EPROCESS,使其 PoolQuotaBlock 指向(目标地址 – 1)。

  • 将 BlockSize 设置为 0x100 字节。

  • 触发幽灵块的释放,导致内核:

  • 从 (目标地址 – 1) 处的 PoolQuota 中减去 0x100 (BlockSize)。

  • 导致目标地址减少0x1。

4.建立任意写入原语:

  • 使用任意减量原语来操作当前线程的 KTHREAD 结构的 PreviousMode 字段。

  • 将 PreviousMode 从 1(用户模式)减至 0(内核模式)。

  • 此操作会绕过本机系统服务例程(例如 NtWriteVirtualMemory)中的地址验证:

  • 通常,这些例程会执行检查以防止从用户模式调用时写入内核空间地址。

  • 如果 PreviousMode 设置为 KernelMode,则会跳过这些检查。

因此,该漏洞获得了写入任意内核内存地址的能力,从而建立了任意写入原语。

5.提升权限(仅数据攻击):

  • 使用任意读取原语来定位系统进程 EPROCESS 结构。

  • 使用任意写入原语将系统进程令牌复制到当前进程的令牌。

6.恢复内核状态:

  • 修复幽灵块和相邻块的 HEAP_VS_CHUNK_HEADER 结构:

  • 使用任意读取原语从内核空间泄漏 RtlpHpHeapGlobals

  • 使用以下方法解码并重新编码标头:

  • decodedVsHeader = encodedVsHeader ⊕ addrof(encodedVsHeader) ⊕ RtlpHpHeapGlobals

  • 更新 UnsafeSize 和 UnsafePrevSize 以恢复正确的块链接

  • 这些修复可以防止检测到损坏的堆结构,从而避免内核模式堆损坏和随后的 BSoD

  • 将 PreviousMode 恢复为其原始值 1(UserMode)


建造

要构建项目:

  1. HEVD-BufferOverflowNonPagedPoolNx-Win10-22H2.sln在 Visual Studio 2022 中打开解决方案文件。

  2. 构建解决方案(F7 或构建 > 构建解决方案)。

用法

1.在目标系统上加载 HEVD 驱动程序。

2.启动低完整性命令提示符:

copy %systemroot%system32cmd.exe .cmd-low-integrity.exeicacls .cmd-low-integrity.exe /setintegritylevel low.cmd-low-integrity.exe

验证完整性级别:

whoami /groups | find "Mandatory Label"

这应该显示“强制标签低强制级别”。

3.从低完整性命令提示符下,运行已编译的漏洞利用程序。

4.如果成功,就会产生一个 SYSTEM shell。

免责声明

此代码仅供教育目的使用。请负责任地使用它,并且仅在您有权测试的系统上使用。

参考

  • synacktiv/Windows 内核 SegmentHeap 对齐块混乱

https://github.com/synacktiv/Windows-kernel-SegmentHeap-Aligned-Chunk-Confusion

  • cbayet/漏洞-CVE-2017-6008

https://github.com/cbayet/Exploit-CVE-2017-6008


https://github.com/ommadawn46/HEVD-BufferOverflowNonPagedPoolNx-Win10-22H2



感谢您抽出

HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

.

HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

.

HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

来阅读本文

HackSys 极易受攻击的驱动程序 (HEVD) - BufferOverflowNonPagedPoolNx 漏洞

点它,分享点赞在看都在这里

原文始发于微信公众号(Ots安全):HackSys 极易受攻击的驱动程序 (HEVD) – BufferOverflowNonPagedPoolNx 漏洞

版权声明:admin 发表于 2024年7月19日 上午11:15。
转载请注明:HackSys 极易受攻击的驱动程序 (HEVD) – BufferOverflowNonPagedPoolNx 漏洞 | CTF导航

相关文章