本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 11216|回复: 22

微软的classpnp.sys的0day,可用来执行任意内核代码 [复制链接]

Rank: 1

发表于 2011-10-22 12:39:32 |显示全部楼层
首先说明,这个漏洞触发需要管理员权限,用处不是很大,不过做做无驱进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实现要复杂些,没有给出
classpnpCN.rar (171.34 KB, 下载次数: 1371)

Rank: 1

发表于 2011-10-24 10:46:21 |显示全部楼层
:D这里果然牛人很多

Rank: 1

发表于 2011-10-25 09:31:06 |显示全部楼层
晕ReadFile也可以,貌似不是fuzz出来的?

Rank: 1

发表于 2011-10-25 13:20:41 |显示全部楼层
zuoyefeng 发表于 2011-10-25 09:31
晕ReadFile也可以,貌似不是fuzz出来的?

不是fuzz出来的,偶遇而已

Rank: 9Rank: 9Rank: 9

发表于 2011-10-25 18:04:36 |显示全部楼层
试下。。。果然很牛
悟空,退下,为师一个人就够了

Rank: 2

发表于 2011-10-25 20:00:06 |显示全部楼层
牛啊!

继续顶上去!

Rank: 1

发表于 2011-10-26 09:52:37 |显示全部楼层
还是debugman识货啊

Rank: 1

发表于 2011-10-26 20:09:14 |显示全部楼层
顶,支持呀。。。。。。过主防.......

Rank: 1

发表于 2011-10-27 13:05:51 |显示全部楼层
大牛

Rank: 1

发表于 2011-10-27 20:59:13 |显示全部楼层
留个名。。 牛B

Rank: 2

发表于 2011-10-28 10:22:23 |显示全部楼层
牛人啊。小弟学习了。

Rank: 5Rank: 5

发表于 2011-10-28 12:57:26 |显示全部楼层
样本里提取的吧~~

Rank: 1

发表于 2011-10-28 14:00:45 |显示全部楼层
不是,在做直接写磁盘进内核实验时发现的

Rank: 1

发表于 2011-10-28 15:07:21 |显示全部楼层
很深的技术啊,驱动方面的都不太了解

Rank: 1

发表于 2011-10-28 23:32:25 |显示全部楼层
这东西好啊!!!

Rank: 1

发表于 2011-11-6 22:01:10 |显示全部楼层
ide与scsi有什么本质区别

这我需要去百度下

Rank: 1

发表于 2011-11-9 10:10:24 |显示全部楼层
initdrv 发表于 2011-11-6 22:01
ide与scsi有什么本质区别

这我需要去百度下

驱动不同

Rank: 1

发表于 2011-11-24 16:25:56 |显示全部楼层
牛啊!

Rank: 1

发表于 2011-12-2 08:48:36 |显示全部楼层
执行后果是?

Rank: 1

发表于 2011-12-2 10:16:54 |显示全部楼层
qhkest 发表于 2011-12-2 08:48
执行后果是?

poc蓝屏,exploit可执行内核代码呗
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-5-22 01:51 , Processed in 0.040382 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部