码迷,mamicode.com
首页 > 其他好文 > 详细

CVE-2011-0065

时间:2018-01-31 01:06:51      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:mozilla   als   分析   回溯   word   获取   成员   local   isp   

  环境 备注
操作系统 Windows 7 x86 sp1 专业版
漏洞软件 Firefox 版本号:3.6.16
调试器 Windbg 版本号:6.12.0002.633

0x00 漏洞描述

在Firefox浏览器3.5.19之前的版本,以及3.6.17之前的3.6.x版本中存在UAF漏洞.mChannel对象在被释放后,成为悬挂指针,然后又在后面被重新引用,导致利用漏洞可以执行任意代码

0x01 定位漏洞源码

首先在Windbg调试器中添加Firefox的符号表地址:

SRV*c:\localsymbols*http://symbols.mozilla.org/firefox

然后,用Windbg附加Firefox浏览器进程,并打开以下poc.html

<html>
<body>
<object id="d"><object>
<script type="text/javascript">
var e;
e=document.getElementById("d");

e.QueryInterface(Components.interfaces.nsIChannelEventSink).onChannelRedirect(null,new Object(‘0c‘),0);
e.data = "";

</script>
</body>
</html>

打开后触发异常,此时栈顶的返回地址如下图所示(0x66434e75)

技术分享图片

图一 栈回溯

用ub命令查看0x66434e75地址前面的指令,漏洞正是出现在xul.dll模块中

技术分享图片

根据c++成员函数this指针调用约定,可以知道上边的ecx为虚表地址,eax为对象地址,而call dword ptr [ecx+18h]调用的正是某个对象的方法,即虚函数。

下面开始在漏洞触发前下断点,先在漏洞触发点所在的函数开头下断

技术分享图片

出现了两个同名的函数,根据图一的栈回溯返回地址,我们可以知道我们要找的函数是第二个

因此,对0x66434d6d所在的函数下断点

技术分享图片

另外,从poc.html中可以看到关键函数onChannelRedirect,结合触发漏洞的类为xul!nsObjectLoadingContent,我们直接在这个类里搜索关键函数

技术分享图片

因此,对xul!nsObjectLoadingContent::onChannelRedirect函数下断点,重新加载poc.html执行后,发现确实可以断下

技术分享图片

此时在xul!nsObjectLoadingContent::onChannelRedirect函数下断下,查看它的三个参数,其中第二个参数是对象(0x06c692d0),其余参数都为0

 技术分享图片

分析该函数的反汇编

技术分享图片

上面的调试信息以及给出了源码的文件路径及行数,因此我们可以直接查看源码,可以通过在线源码地址http://hg.mozilla.org/releases/mozilla-1.9.2/file/c24f21581d77/content/base/src/nsObjectLoadingContent.cpp获取到。

技术分享图片

在1028行处,

CVE-2011-0065

标签:mozilla   als   分析   回溯   word   获取   成员   local   isp   

原文地址:https://www.cnblogs.com/elvirangel/p/8387779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!