欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创][05] HEVD 内核漏洞之未初始化栈变量

[原创][05] HEVD 内核漏洞之未初始化栈变量

0x00 前言

上一篇研究了一下基础的内核整数溢出漏洞,漏洞利用还有瑕疵,但是原理上还是比较清楚的,后续有时间继续搞一哈,这篇我们继续下一个内核漏洞:未初始化栈变量。

实验环境:Win10专业版+VMware Workstation 15 Pro+Win7 x86 sp1

实验工具:VS2015+Windbg+KmdManager+DbgViewer

0x01 漏洞原理

顾名思义,即内核函数栈中局部变量未初始化。

分析

typedef struct _UNINITIALIZED_MEMORY_STACK

{

    ULONG Value;

    FunctionPointer Callback;

    ULONG Buffer[58];

} UNINITIALIZED_MEMORY_STACK, *PUNINITIALIZED_MEMORY_STACK;

NTSTATUS

TriggerUninitializedMemoryStack( _In_ PVOID UserBuffer)

{

    ULONG UserValue = 0;

    ULONG MagicValue = 0xBAD0B0B0;

    NTSTATUS Status = STATUS_SUCCESS;

#ifdef SECURE

    //安全版本

    UNINITIALIZED_MEMORY_STACK UninitializedMemory = { 0 };

#else

    //漏洞版本

    UNINITIALIZED_MEMORY_STACK UninitializedMemory;

#endif

    PAGED_CODE();

    __try

    {

        ProbeForRead(UserBuffer, sizeof(UNINITIALIZED_MEMORY_STACK), (ULONG)__alignof(UCHAR));

        // Get the value from user mode

        UserValue = *(PULONG)UserBuffer;

        DbgPrint("[+] UserValue: 0x%p\n", UserValue);

        DbgPrint("[+] UninitializedMemory Address: 0x%p\n", &UninitializedMemory);

        // Validate the magic value

        if (UserValue == MagicValue) 

		{

            UninitializedMemory.Value = UserValue;

            UninitializedMemory.Callback = &UninitializedMemoryStackObjectCallback;//自定义内核函数  无意义

        }

        DbgPrint("[+] UninitializedMemory.Value: 0x%p\n", UninitializedMemory.Value);

        DbgPrint("[+] UninitializedMemory.Callback: 0x%p\n", UninitializedMemory.Callback);

#ifndef SECURE

        DbgPrint("[+] Triggering Uninitialized Memory in Stack\n");

#endif

        // Call the callback function

        if (UninitializedMemory.Callback)

        {

            UninitializedMemory.Callback();

        }

    }

    __except (EXCEPTION_EXECUTE_HANDLER)

    {

        Status = GetExceptionCode();

        DbgPrint("[-] Exception Code: 0x%X\n", Status);

    }

    return Status;

}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功