Windows内核漏洞利用

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29

将用户模式数据复制到内核模式函数堆栈
溢出
IntegerOverflow.c的第100行中的问题在于,如果我们将size参数设置为0xFFFFFFFC,然后添加BufferTerminator的大小(为4个字节),则有效大小为– 0xFFFFFFFC + 4 = 0x00000000,小于KernelBuffer的大小。因此,我们通过了数据大小检查,然后将缓冲区复制到内核模式。
漏洞验证
现在,为了验证这一点,我们将缓冲区发送到HEVD,但是要传递0xFFFFFFFC作为缓冲区的大小。现在,我们将不会放置巨大的缓冲区并使内核崩溃,而只是发送一个小缓冲区并进行确认。

触发整数溢出的PoC
因为我们知道缓冲区有512个ULONG,所以我们将发送此数据,并查看内核会做什么?
注意:这里的重点是DeviceIoControl的第4个参数,而不是实际的数据。
最后,将此缓冲区发送到HEVD,看看会发生什么。

成功触发整数溢出漏洞
如你在图片中看到的,UserBuffer Size显示为0xFFFFFFFC,但我们仍然设法绕过了大小有效性检查并触发了整数溢出。
我们确认了通过放置0xFFFFFFFC,可以绕过检查大小,现在剩下的就是在UserBuffer之后放置一个模式(唯一的模式),然后在其后放置终止符以查找保存的返回指针覆盖。
如果你不知道如何执行此操作,请阅读本文的第1部分。
利用溢出漏洞
剩下的就是使用HEVD中提供的TokenStealingPayloadWin7 shellcode覆盖保存的返回地址,然后完成就可以了。
注意:你可能需要稍微修改shellcode,以免崩溃。
获取shell
首先验证我们是否是普通用户:

普通用户
可以看出,我只是普通用户。
运行漏洞利用程序后,我成为了NT权限/系统。

成功利用整数溢出漏洞
你可以在我的代码库中,找到整个代码。

上一页  [1] [2] [3]