-
-
[原创]]HEVD学习笔记之空指针引用
-
发表于: 2021-11-10 10:05 16733
-
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期)
赞赏
- [原创]CVE-2022-21882提权漏洞学习笔记 16403
- [原创]CVE-2021-1732提权漏洞学习笔记 19507
- [原创]CVE-2014-1767提权漏洞学习笔记 15200
- [原创]CVE-2018-8453提权漏洞学习笔记 18539
- [原创]CVE-2020-1054提权漏洞学习笔记 13550