首页
社区
课程
招聘
[原创]]HEVD学习笔记之空指针引用
发表于: 2021-11-10 10:05 16748

[原创]]HEVD学习笔记之空指针引用

2021-11-10 10:05
16748

HEVD的介绍与实验环境请看:HEVD学习笔记之概述

申请内存使用完以后,程序会对该内存进行释放并将指针清空,如果此时在对这个指针进行使用,就很有可能发送错误。比如下面的程序:

在释放掉func的内存并将其清空以后再次对它进行调用程序就会发送错误

该漏洞在函数地址表中的第11个,也就是说要触发该漏洞,IOCTL要等于0x222003 + 10 * 4。

此处将IRP和CurrentStackLocation入栈以后就调用了NullPointerDereferenceIoctrlHandler函数,继续跟进这个函数。

该函数将输入缓冲区指针入栈以后调用TriggerNullPointerDerenference。

在该函数中会申请0x8大小,tag为"Hack"的内存,将其地址赋给edi。

如果内存申请成功,函数就会将输入缓冲区中的前4字节取出,判断是否为0x0BAD0B0B0,如果不是是则继续向下执行,对申请到的内存进行赋值

此时edi偏移为4的地址保存的函数内容如下,可以看到就是一个简单的输出函数

如果不是则会跳转到loc_445BD5处,此处将会把申请的内存释放掉并将edi赋值为ebx,由于ebx在上面清0了,所以此处会将edi清0

无论走上面的哪个分支,接下来都会走loc_445C13处的代码,此处的代码会对申请的内存的后4字节的内容取出,作为函数地址进行调用

由上可以看到,通过控制输入缓冲区的内容,可以实现在edi等于0的时候,调用edi+4,也就是地址4中保存的函数地址,那如果只是地址4中保存的是我们指定的ShellCode的地址,此时函数就会调用ShellCode。

由上可知,如果输入缓冲区指针保存的内容为0x0BAD0B0B0的时候,程序就会正常调用分配的函数


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-1-19 17:57 被1900编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//