漏洞分析丨HEVD-0x1.StackOverflow[win7x86]

摘要由CSDN通过智能技术生成

前言
窥探Ring0漏洞世界第一课:缓冲区溢出

实验环境:

•虚拟机:Windows 7 x86

•物理机:Windows 10 x64

•软件:IDA,Windbg,VS2022

漏洞分析
该环境提供了各种内核漏洞场景供学习,本次实验内容是BufferOverflowStack

首先用IDA打开HEVD.sys,搜索BufferOverflowStack,可以看到两个函数:BufferOverflowStackIoctlHandler和TriggerBufferOverflowStack,前者是分发程序,后者是漏洞程序

从IDA的F5里可以看出,这是一个经典的栈溢出漏洞:使用用户输入的长度进行memcpy调用

int __stdcall TriggerBufferOverflowStack(void *UserBuffer, unsigned int Size)
{
unsigned int KernelBuffer[512]; // [esp+10h] [ebp-81Ch] BYREF
 CPPEH_RECORD ms_exc; // [esp+814h] [ebp-18h]

 memset(KernelBuffer, 0, sizeof(KernelBuffer));
 ms_exc.registration.TryLevel = 0;
 ProbeForRead(UserBuffer, 0x800u, 1u); // 检查用户缓冲区是否可读
 _DbgPrintEx(0x4Du, 3u, "[+] UserBuffer: 0x%p\n", UserBuffer);
 _DbgPrintEx(0x4Du, 3u, "[+] UserBuffer Size: 0x%zX\n", Size);
 _DbgPrintEx(0x4Du, 3u, "[+] KernelBuffer: 0x%p\n", KernelBuffer);
 _DbgPrintEx(0x4Du, 3u, "[+] KernelBuffer Size: 0x%zX\n", 0x800u);
  _DbgPrintEx(0x4Du, 3u, "[+] Triggering Buffer Overflow in Stack\n");
 memcpy(KernelBuffer, UserBuffer, Size);       // 经典缓冲区溢出
  return 0;
}

接下来看看要如何进入这个漏洞函数,利用IDA的交叉引用功能,可以看到是BufferOverflowStackIoctlHandler函数:

int __stdcall BufferOverflowStackIoctlHandler(_IRP *Irp, _IO_STACK_LOCATION *IrpSp)
{
int v2; // ecx
 _NAMED_PIPE_CREATE_PARAMETERS *Parameters; // edx

  v2 = -1073741823;
 Parameters = IrpSp->Parameters.CreatePipe.Parameters;
  if ( Parameters )
   return TriggerBufferOverflowStack(Parameters, IrpSp->Parameters.Create.Options);
  return v2;
}

这里使用的是IRP传参,也就是说驱动是使用IO通信的,接着使用交叉引用向上找,找到通信的地方,找到进入这里用的控制码:

看这个分支结构,和这明显的jumptable标识,这是一个跳转表,这是switch-case结构,这里应该就是通过控制码进行跳转:

 

PAGE:00444064 _IrpDeviceIoCtlHandler@8 proc near      ; DATA XREF: DriverEntry(x,x)+8A↓o
PAGE:00444064
PAGE:00444064                               DeviceObject= dword ptr  8
PAGE:00444064                               Irp= dword ptr  0Ch
PAGE:00444064
PAGE:00444064 55                            push    ebp
PAGE:00444065 8B EC                         mov     ebp, esp
PAGE:00444067 53                            push    ebx
P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极安御信安全研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值