U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 帮助中心 >

漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]

来源:http://www.tudoupe.com时间:2022-08-02

探索 Ring0 脆弱性世界: 单元化堆栈变量脆弱性

单元化变量本身并不是一个问题,但如果在这个变量结构中存储将被执行的东西(例如撤销函数),那也是另一个问题。

实验环境

•虚拟机:Windows 7 x86

•物理机器:Windows 10 x64

•软件:IDA,Windbg,VS2022

同样,IDA首先发现了触发函数TriggerUninitializedMemoryStack,它分析了该漏洞的存在。

首先,从用户提供的指针中提取值并保存到toebx:

然后立即确定值是否是一个魔术数字0BAD0B0B0h。

是的话,就将该值和一个函数地址保存到了栈中一个结构体里,如果不是的话,则不进行操作,然后进行判断,判断栈中的这个变量是否有值,如果有值,且为固定这个函数的地址的话,就执行这个函数。

如果该位置有值,且不是固定函数地址,则将此值称为函数:

驱动源码:

安全版本和非安全版本之间的区别只是一个局部变量是否被初始化。事实上,不初始化似乎是一个问题,问题的关键是撤销函数在变量中存储,然后撤销,导致一个漏洞。

如果您输入一个错误值(而不是一个魔术号码)并控制转导地址,您可以执行shellcode。

问题是,如何控制转向地址? 单一化局部变量存储在堆栈中,而值是不可预测的。堆栈中存储的值是多少,变量的价值是多少。

为参考[1],控制堆栈中的值需要编写如下:

1.找到内核堆栈的初始化地址;

2.在调用地址所在的内核堆栈中找到初始化地址的极化;

3. 通过在用户模式下用户可控输入喷射内核栈(参考资料[2])。

根据参考 [2], 称为 NtMapUserPhysicalPages 的未文档函数可以将大量数据注入内核堆栈:

这里是一个缓冲阵列,堆栈空间为1024*大小(ULONG_PTR)。

最后,如果NumberOfPages变量小于1024,则使用堆栈缓冲地址来调用MiCaptureUlongPtrArray函数。

使用IDA打开Windows 7 x86内核文件ntkrnlpa并找到呼叫:

由于该函数是一个快速调用调用,在x86下快速调用将优先使用ecx和 edx输入,额外的参数只使用堆栈,换句话说,通过的参数是: NumberOfPages,UserPfnArray,栈缓冲区的地址。

然后, MiCaptureUlongPtrArray的实现如下:

在NtMapUserPhysicalPages函数中,发送到堆栈缓冲区的数据被填充。

到此,可以知道,只需要向调用NtMapUserPhysicalPages函数,提供第二个参数是大小,第三个参数是用户缓冲区,即可实现在栈中进行喷射,接下来进行编写exp实现利用。

继续使用以前的模板更改。

通过函数,可以实现内核堆栈的预配置,然后使用非魔法输入来调用循环函数,使未初始化变量填满我们配置的值,从而完成使用:

参考资料

•[1] Windows Kernel Exploitation Tutorial Part 6: Uninitialized Stack Variable - rootkit (rootkits.xyz) https://rootkits.xyz/blog/2018/01/kernel-uninitialized-stack-variable/

•[2] nt!NtMapUserPhysicalPages and Kernel Stack-Spraying Techniques | j00ru//vx tech blog (vexillium.org) https://j00ru.vexillium.org/2011/05/windows-kernel-stack-spraying-techniques/

•[3] CVE-2016-0040 - DreamoneOnly - 博客园 (cnblogs.com) https://www.cnblogs.com/DreamoneOnly/p/13163036.html

•[4] HEVD Kernel Exploitation -- Uninitialized Stack & Heap (seebug.org) https://paper.seebug.org/200/

•[5] ヾ(Ő∀Ő3)ノ嘻嘻![05] HEVD 内核漏洞之未初始化栈变量 | Saturn35 https://saturn35.com/2019/07/26/20190726-2/

•[6] C library function - memcpy() (tutorialspoint.com) https://www.tutorialspoint.com/c_standard_library/c_function_memcpy.htm

•[7] __fastcall | Microsoft Docs https://docs.microsoft.com/zh-cn/cpp/cpp/fastcall?view=msvc-170

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息