之前看了http://bbs.pediy.com/showthread.php?t=172839,对该漏洞的利用过程还是不是很清楚,加之以前没有研究过内核漏洞,所以想自己调试一下,重现漏洞利用的过程。在调试过程中借鉴了instruder大牛的ppt,小弟水平有限,分析的不对的地方还望多多批评指正。EPATHOBJ Exploit漏洞调试心得环境: 物理主机windows 7 32位+windbg 虚拟机 windows xp sp3 32位 该漏洞触发是当PathRecord->next被替换成ExploitRecord,之前的EPATHOBJ__bFlatten 循环就会被终止,调用EPATHOBJ__pprFlattenRec函数,触发任意地址写PathObj对象地址,所以在WatchdogThread函数中下断点,如下图: 调用InterlockedExchange函数将&PathRecord->next指向ExploitRecord,如图: 在0x4010d2处下断点,g命令运行到0x4010d2处,如下图: Call testSYS+0x1810是调用 LogMessage(L_ERROR, "InterlockedExchange(0x%08x, 0x%08x);", &PathRecord->next, &ExploitRecord); 而0x4010f9处就是kernel32!InterlockedExchange函数,此时堆栈如图: 而0x940000就是PathRecord结构,如图: 此时反汇编win32k!EPATHOBJ::bFlatten,如图: 0xbf8b8b67处下断点,g命令运行到该处,此时eax的数据如图: 0x448e50就是ExploitRecord结构,此时调用0xbf8b8b74处的 win32!EPATHOBJ::pprFlattenRec函数触发任意地址写,这里借用instruder大牛的ppt里面的关于漏洞细节的图片:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课