初探栈溢出(上)

0x01 HEVD介绍

HEVD全称为HackSys Ex

treme Vulnerable Drive,是一个项目,故意设计包含多种漏洞的驱动程序,旨在帮助安全爱好者来提升他们在内核层面的漏洞利用能力。

说白了,是一个内核漏洞的靶场。

项目地址:https://github.com/hacksysteam/HackSysExtremeVulnerableDriver

关于安装配置初始环境,建议参考:

https://tttang.com/archive/1332/

https://bbs.pediy.com/thread-218838.htm

这里就不再赘述。

本人能力有限,刚学习过一些内核知识,文章中出现的任何错误欢迎师傅们批评指正。

下面我们直接开始,从栈溢出开始

0x02 栈溢出函数定位

HackSysExtremeVulnerableDriver-3.00\Driver\HEVD\BufferOverflowStack.c文件中。

初探栈溢出(上)_第1张图片

位于该文件的107行,没有经过校验Size的大小而直接使用函数进行拷贝。

相关漏洞函数为:TriggerBufferOverflowStack

将HEVD.sys文件拖入ida中分析。定位到TriggerBufferOverflowStack函数

初探栈溢出(上)_第2张图片

可以看到使用了memcpykernelBuffer有拷贝动作,将UserBuffer的值拷贝到kernelBuffer中,拷贝长度为传入的参数Size。

问题在于kernelBuffer的长度是固定的:

初探栈溢出(上)_第3张图片

一个ULONG类型对应四个字节,那么512*4=2048=800h,这和IDA逆向出来的代码是相同的:

初探栈溢出(上)_第4张图片

而UserBuffer和Size为传入的参数,并且对Size的大小没有限制,那么倘若Size大小大于800h字节,则会发生栈溢出。

0x03 溢出函数是怎样被调用的

相关调用链

初探栈溢出(上)_第5张图片

首先是进入到DriverEntry(x,x),然后通过IrpDeviceIoCtlHandler(x,x)根据IoControlCode使用switch函数跳转到BufferOverflowStackIoctlHandler然后进入TriggerBufferOverflowStack进行溢出操作

找到IrpIrpDeviceIoCtlHandler函数

初探栈溢出(上)_第6张图片

这里看的不是很清楚,可以通过IDA F5反编译一下

初探栈溢出(上)_第7张图片

可以看到只有当IoControlCode为2236419时,才会调用BufferOverflowStackIoctlHandler,继而调用TriggerBufferOverflowStack

你可能感兴趣的:(驱动开发,web安全,网络,安全)