HEVD 环境搭建
安装Visual Studio 2022、cmake、git cli,然后从https://github.com/hacksysteam/HackSysExtremeVulnerableDriver 下载源码,然后用内置的bat脚本编译即可。
栈溢出
定位
HEVD直接把漏洞点写在了函数名上,用IDA打开HEVD.sys文件,会直接定位到DriverEntry,用于打印调试信息和初始化设备(Device)。
IrpDeviceIoCtlHandler函数里定义了可供User mode程序使用的IOCTL请求。其中,IOCTL Code为0x222003时,对应的是BufferOverflowStackIoctlHandler。
分析
BufferOverflowStackIoctlHandler本身没有栈溢出,但是它调用了TriggerBufferOverflowStack。TriggerBufferOverflowStack函数用于读取User mode发送的buffer并将其复制到栈上的KernelBuffer中。
栈溢出的根源在于调用memmove时没有考虑到KernelBuffer最大只有2048字节,我们可以控制memmove的Size参数的值从而栈溢出。
1 | __int64 __fastcall TriggerBufferOverflowStack(void *UserBuffer, size_t Size) |
利用
这里我们的利用想法也很简单,通过栈溢出修改return address来执行任意代码。
1 |
|