Microsoft CVE-2021-40449漏洞分析与利用
字数 1883 2025-08-09 09:46:33

CVE-2021-40449漏洞分析与利用教学文档

1. 漏洞概述

CVE-2021-40449是Windows内核中的一个提权漏洞,存在于Win32kfull.sys驱动中,与Windows窗口管理和图形化设备接口相关。该漏洞允许普通权限用户提升至SYSTEM权限。

受影响系统版本

  • Windows Server 2004/20H2 (Server Core Installation)
  • Windows 10 Version 1607/1809/1909/2004/20H2/21H1
  • Windows 7 for 32/64-bit Systems Service Pack 1
  • Windows Server 2008/2012/2016/2019/2022
  • Windows 11 for ARM64-based/x64-based Systems
  • Windows 8.1/RT 8.1

2. 技术背景知识

2.1 UAF (Use After Free)漏洞

  • 定义:在堆上动态分配的空间被释放后仍被使用
  • 利用关键点
    1. free()调用后指针是否被重置
    2. 后续malloc()是否可能分配到被释放区域
    3. 利用未被重置的指针进行攻击

2.2 相关数据结构

  • HDC:Handle to Device Context,图形设备信息对象的句柄
  • PDC对象:打印机设备上下文对象

2.3 C++命名空间

  • 用于区分不同库中相同名称的函数、类、变量
  • 语法:namespace namespace_name { // 代码声明 }
  • 引用:name::code

3. 漏洞成因分析

3.1 漏洞位置

  • 位于win32kfull!NtGdiResetDC函数中
  • 具体问题在win32kfull!GreResetDCInternal调用win32kbase!hdcOpenDCW

3.2 漏洞触发流程

  1. NtGdiResetDC调用GreResetDCInternal
  2. GreResetDCInternal调用用户态的hdcOpenDCW
  3. 在回调期间,攻击者可对相同句柄再次调用NtGdiResetDC
  4. 导致PDC对象被释放但仍被使用

3.3 关键代码点

  • v11+0xAB8:可设置为任意执行函数
  • v11+0x708(new_dcobj[0] + 6) + 0x708i64:可在用户态修改的参数
  • 最终导致任意地址读写

4. 漏洞利用技术

4.1 利用准备

  1. 获取exp自身token对象地址
    • 筛选PoolFlag="ThNm"的堆
    • 使用pooltag.txt识别数据类型

4.2 利用步骤

步骤1:Hook打印机驱动回调表

SetupUsermodeCallbackHook()
  1. 枚举可用打印机并获取驱动信息
  2. 遍历每个驱动,找到目标函数并修改回调表

步骤2:创建全局DC对象

CreateDC()
  • 保存返回的HDC句柄

步骤3:首次调用ResetDC

ResetDC(hDC)
  • 触发NtDgiResetDCGreResetDCInternal
  • 获取HDC对应的PDC对象
  • 调用hdcOpenDCW

步骤4:执行Hook函数

  • 关键点:
    • malloc()可能分配到被释放区域
    • free()不会清除内存内容
  • 在回调中:
    1. 设置globals::should_trigger = true
    2. 再次调用ResetDC传入相同HDC
    3. 导致PDC对象被释放但结构错误

步骤5:完成第二次ResetDC调用

  • 执行流程:
    • _guard_dispatch_icall_nopjmp rax
    • rax = *(rbx+0xAD0)
    • RBX来自用户层传入的HDC创建的DCOBJ指针
  • 此时PDC对象已被释放但未被检查
  • 可实现任意内核函数调用

步骤6:提权操作

  1. 设置token的0x40位置Privileges
  2. 为winlogon进程添加SE_DEBUG_PRIVILEGE权限
  3. 通过TheadName泄露内核地址空间
  4. 调用RtlSetAllBits设置Fake_RtlBitMapAddr
  5. 通过堆喷射控制内存布局
  6. 最终实现指针利用和权限提升

4.3 注入技术

  • 向winlogon注入启动cmd的shellcode

5. 防御与修复建议

5.1 官方补丁

  • 微软已发布补丁,应及时安装

5.2 防御措施

  1. 监控可疑的ResetDC调用链
  2. 检测异常的打印机驱动回调修改
  3. 限制普通用户的设备上下文操作权限

6. 参考资源

  1. UAF漏洞原理
  2. 卡巴斯基分析
  3. 微软安全指南
  4. CVE记录
  5. CreateDC文档
  6. 漏洞复现过程

7. 演示视频

B站演示视频

CVE-2021-40449漏洞分析与利用教学文档 1. 漏洞概述 CVE-2021-40449是Windows内核中的一个提权漏洞,存在于Win32kfull.sys驱动中,与Windows窗口管理和图形化设备接口相关。该漏洞允许普通权限用户提升至SYSTEM权限。 受影响系统版本 Windows Server 2004/20H2 (Server Core Installation) Windows 10 Version 1607/1809/1909/2004/20H2/21H1 Windows 7 for 32/64-bit Systems Service Pack 1 Windows Server 2008/2012/2016/2019/2022 Windows 11 for ARM64-based/x64-based Systems Windows 8.1/RT 8.1 2. 技术背景知识 2.1 UAF (Use After Free)漏洞 定义 :在堆上动态分配的空间被释放后仍被使用 利用关键点 : free()调用后指针是否被重置 后续malloc()是否可能分配到被释放区域 利用未被重置的指针进行攻击 2.2 相关数据结构 HDC :Handle to Device Context,图形设备信息对象的句柄 PDC对象 :打印机设备上下文对象 2.3 C++命名空间 用于区分不同库中相同名称的函数、类、变量 语法: namespace namespace_name { // 代码声明 } 引用: name::code 3. 漏洞成因分析 3.1 漏洞位置 位于 win32kfull!NtGdiResetDC 函数中 具体问题在 win32kfull!GreResetDCInternal 调用 win32kbase!hdcOpenDCW 时 3.2 漏洞触发流程 NtGdiResetDC 调用 GreResetDCInternal GreResetDCInternal 调用用户态的 hdcOpenDCW 在回调期间,攻击者可对相同句柄再次调用 NtGdiResetDC 导致PDC对象被释放但仍被使用 3.3 关键代码点 v11+0xAB8 :可设置为任意执行函数 v11+0x708 和 (new_dcobj[0] + 6) + 0x708i64 :可在用户态修改的参数 最终导致任意地址读写 4. 漏洞利用技术 4.1 利用准备 获取exp自身token对象地址 筛选 PoolFlag="ThNm" 的堆 使用pooltag.txt识别数据类型 4.2 利用步骤 步骤1:Hook打印机驱动回调表 枚举可用打印机并获取驱动信息 遍历每个驱动,找到目标函数并修改回调表 步骤2:创建全局DC对象 保存返回的HDC句柄 步骤3:首次调用ResetDC 触发 NtDgiResetDC 和 GreResetDCInternal 获取HDC对应的PDC对象 调用 hdcOpenDCW 步骤4:执行Hook函数 关键点: malloc() 可能分配到被释放区域 free() 不会清除内存内容 在回调中: 设置 globals::should_trigger = true 再次调用 ResetDC 传入相同HDC 导致PDC对象被释放但结构错误 步骤5:完成第二次ResetDC调用 执行流程: _guard_dispatch_icall_nop → jmp rax rax = *(rbx+0xAD0) RBX来自用户层传入的HDC创建的DCOBJ指针 此时PDC对象已被释放但未被检查 可实现任意内核函数调用 步骤6:提权操作 设置token的0x40位置Privileges 为winlogon进程添加 SE_DEBUG_PRIVILEGE 权限 通过 TheadName 泄露内核地址空间 调用 RtlSetAllBits 设置 Fake_RtlBitMapAddr 通过堆喷射控制内存布局 最终实现指针利用和权限提升 4.3 注入技术 向winlogon注入启动cmd的shellcode 5. 防御与修复建议 5.1 官方补丁 微软已发布补丁,应及时安装 5.2 防御措施 监控可疑的ResetDC调用链 检测异常的打印机驱动回调修改 限制普通用户的设备上下文操作权限 6. 参考资源 UAF漏洞原理 卡巴斯基分析 微软安全指南 CVE记录 CreateDC文档 漏洞复现过程 7. 演示视频 B站演示视频