初探栈溢出(上)

2023-12-15 13:19:23

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文件中。

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

相关漏洞函数为:TriggerBufferOverflowStack

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

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

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

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

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

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

相关调用链

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

找到IrpIrpDeviceIoCtlHandler函数

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

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

文章来源:https://blog.csdn.net/2301_80520893/article/details/134926742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。