首页
社区
课程
招聘
[原创]发个微软的classpnp.sys的0day,可用来执行任意内核代码
发表于: 2011-10-13 10:20 10408

[原创]发个微软的classpnp.sys的0day,可用来执行任意内核代码

2011-10-13 10:20
10408

首先说明,这个漏洞触发需要管理员权限,用处不是很大,不过做做无驱进ring0,过过主防应该还是有点用的
————————————————————————————————————————
classpnp.sys的ServiceTransferRequest存在一个安全缺陷,可使应用程序执行任意内核代码,已验证的环境windows xp sp3,ntfs文件驱动
函数原型NTSTATUS ServiceTransferRequest(PDEVICE_OBJECT Fdo,PIRP Irp);
在函数中直接使用了参数irp的MdlAddress成员,没有对其进行有效性检查,通过某种特征的函数访问路径可使IRP的MdlAddress为0而导致BSOD,函数头逆向如下
CLASSPNP!ServiceTransferRequest:
f7562bfd 8bff            mov     edi,edi
f7562bff 55              push    ebp
f7562c00 8bec            mov     ebp,esp
f7562c02 83ec18          sub     esp,18h
f7562c05 8b4508          mov     eax,dword ptr [ebp+8]
f7562c08 8b4028          mov     eax,dword ptr [eax+28h]
f7562c0b 53              push    ebx
f7562c0c 8b98b4020000    mov     ebx,dword ptr [eax+2B4h]
f7562c12 56              push    esi
f7562c13 8b750c          mov     esi,dword ptr [ebp+0Ch]//irp获取参数irp
f7562c16 8b4e04          mov     ecx,dword ptr [esi+4]//irp.mdladdress得到irp的mdladdres成员
f7562c19 8b4660          mov     eax,dword ptr [esi+60h]
f7562c1c 8b5004          mov     edx,dword ptr [eax+4]
f7562c1f 57              push    edi
f7562c20 8b7918          mov     edi,dword ptr [ecx+18h]//mdl.byteoffset访问18h会导致bsod
f7562c23 037910          add     edi,dword ptr [ecx+10h]//mdl.startVa

通过某种特殊的访问可导致上述的IRP中的mdladdres为0导致蓝屏,重现步骤
1、获取system进程中pagefile文件的句柄
2、通过此句柄来读取pagefile文件
具体重现步骤请见附件中的poc文件夹,bsod时的函数栈如下:
STACK_TEXT:  
b2a3a980 f7562dcd 82b2a9c0 82642008 82642008 CLASSPNP!ServiceTransferRequest+0x23
b2a3a9a4 804e23c9 82b2a9c0 00000000 826b2030 CLASSPNP!ClassReadWrite+0xff
b2a3a9b4 f77aa921 826b7c70 8264212c b2a3a9f0 nt!IopfCallDriver+0x31
b2a3a9c4 804e23c9 82b2a798 82642008 82642150 PartMgr!PmReadWrite+0x95
b2a3a9d4 f74a41c6 826b53a0 82b9fa58 82642008 nt!IopfCallDriver+0x31
b2a3a9f0 804e23c9 826b7bb8 82642008 826b2f38 ftdisk!FtDiskReadWrite+0x194
b2a3aa00 f754251a 826b77e8 826b77e8 b2a3aae8 nt!IopfCallDriver+0x31
b2a3aa10 804e23c9 826b77e8 82642008 bbfca000 VolSnap!VolSnapRead+0x26
b2a3aa20 f737aa19 829bd608 825ca008 82727008 nt!IopfCallDriver+0x31
b2a3aae8 f73807e2 82727008 82642008 825ca008 Ntfs!NtfsPagingFileIo+0x1b2
b2a3abc4 f737a00a 82727008 82642008 00000001 Ntfs!NtfsCommonRead+0x2bd
b2a3ac64 804e23c9 826b52c0 82642008 826b7400 Ntfs!NtfsFsdRead+0x22d
b2a3ac74 f741b459 b2a3aca0 804e23c9 826b5c88 nt!IopfCallDriver+0x31
b2a3ac7c 804e23c9 826b5c88 82642008 80702410 sr!SrPassThrough+0x31
b2a3ac8c 805716e2 82642174 82642008 82895580 nt!IopfCallDriver+0x31
b2a3aca0 8057fb27 826b5c88 82642008 82895580 nt!IopSynchronousServiceTail+0x70
b2a3ad38 804de98f 00000080 00000084 00000000 nt!NtReadFile+0x55d
b2a3ad38 7c92e4f4 00000080 00000084 00000000 nt!KiFastCallEntry+0xfc
0012ddc0 7c92d9bc 7c80199d 00000080 00000084 ntdll!KiFastSystemCallRet
0012ddc4 7c80199d 00000080 00000084 00000000 ntdll!ZwReadFile+0xc
0012de2c 0042f3ba 00000080 0012df18 00002000 kernel32!ReadFile+0x10d
0012ff54 0042ffc2 00000001 009a2fb8 009a3058 poc!wmain+0xba 
0012ffb8 0042fd7d 0012fff0 7c817067 80000001 poc!__tmainCRTStartup+0x232
0012ffc0 7c817067 80000001 0007ddb4 7ffd6000 poc!wmainCRTStartup+0xd
0012fff0 00000000 0042c5aa 00000000 78746341 kernel32!BaseProcessStart+0x23

通过此漏洞在应用层执行任意内核代码的演示请见附件中的文件夹exploit,请在ide磁盘上实验,scsi实现要复杂些,没有给出


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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (17)
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
2
有谁能在非管理员权限下利用这个漏洞请告知一下,谢谢
2011-10-13 10:58
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
拜模神贴123
2011-10-13 11:17
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
0day贴就要顶:)
2011-10-13 11:28
0
雪    币: 160
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
同顶,顺便帮你转载
2011-10-13 21:24
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
帮顶!~~~~~
2011-10-14 10:42
0
雪    币: 3134
活跃值: (1279)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
膜拜,栈这么深。。
2011-10-14 10:55
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
8
2011-10-17 12:40
0
雪    币: 579
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
向楼主学习。
2011-10-17 13:02
0
雪    币: 859
活跃值: (329)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
10
2011-10-18 01:19
0
雪    币: 82
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
顶啊  最近出了不少漏洞poc啊   顶
2011-10-18 12:14
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
12
有exploit啊
2011-10-19 09:53
0
雪    币: 1693
活跃值: (761)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
拜模123456
2011-10-19 10:08
0
雪    币: 252
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pxf
14
源码编译报错,能发个编译无错的吗
2012-4-6 15:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
厉害 学习  这么深。。。
2012-4-8 14:22
0
雪    币: 252
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pxf
16
编译ok了,win7下没反应,xp sp3下成功
2012-4-8 15:50
0
雪    币: 220
活跃值: (776)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可以用VS2010编译,VC6.0不行,能改成+驱动的不?
2012-4-24 10:52
0
雪    币: 240
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
规矩网络,感谢分享!
2012-4-25 11:45
0
游客
登录 | 注册 方可回帖
返回
//