环境 备注
操作系统 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行处,将新对象aNewChannel赋给mChannel对象,但由于Firefox本身的垃圾回收机制,在onChannelRedirect函数调用完毕后,它会回收不再使用的对象,即仅在本函数内使用的aNewChannel对象,此时mchannel就成了悬挂指针

继续执行下去会断在我们前面设置的第二个断点nsObjectLoadingContent::LoadObject函数

同样的,找到函数源码

在1204行,引用了悬挂指针mChannel对象的虚函数

分析到这里,我们可以得出结论:

在nsObjectLoadingCoChannelRedirect函数中,当mChannel对象未被分配时,会临时赋予一个新对象值,而该新对象值在函数返回后会被回收释放,导致mChannel成为悬挂指针,
程序又在后面的nsObjectLoadingContent::LoadObject函数中引用了悬挂指针mChannel,最终导致UAF漏洞的发生。

  

  

CVE-2011-0065的更多相关文章

  1. 第一次亲密接触MSF

    第一次亲密接触MSF Metasploit Framework介绍 Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇宙”之名的强 ...

  2. 第十七章 Metasploit Framework

    渗透测试者的困扰▪ 需要掌握数百个工具软件,上千个命令参数,实在记不住▪ 新出现的漏洞PoC/EXP有不同的运行环境要求,准备工作繁琐▪ 大部分时间都在学习使用不同工具的使用习惯,如果能统一就好了▪ ...

  3. msf学习笔记

    metasploit frame 这是一个渗透测试框架,围绕这个框架,我们就可以完成最终的目标,即渗透测试. 渗透测试者困扰:需要掌握数百个工具,上千条命令参数,很难记住. 新出现的漏洞PoC/EXP ...

  4. How to exploit the x32 recvmmsg() kernel vulnerability CVE 2014-0038

    http://blog.includesecurity.com/2014/03/exploit-CVE-2014-0038-x32-recvmmsg-kernel-vulnerablity.html ...

  5. [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)

    正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...

  6. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

  7. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  8. http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html

    http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html

  9. Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs

      Microsoft Dynamics CRM 2013   BTW: RC stands for Release for Candidate, and RTM stands for Release ...

  10. CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis

    目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...

随机推荐

  1. Python 获取脚本路径以及脚本所在文件夹路径

    import os script_path = os.path.realpath(__file__) script_dir = os.path.dirname(script_path)

  2. spring框架_AOP和注解

    1.什么是AOP :全称是Aspect Oriented Programming即:面向切面编程. 简单来说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础 ...

  3. eosiolib文件解析

    Source base on EOS version: 1.0.5,some photo except.   在eos源码中,eosiolib库在源码中的位置如下: 在\eos\contracts\e ...

  4. 《SQL 进阶教程》 case:练习题1-1-1 多列数据的最大值

    select name, case when case when x > y then x else y end < z then z else case when x < y th ...

  5. compass初探

    1.安装compass: sudo gem install compass 如果你用的是Windows系统,那么要省略前面的sudo. 2.项目初始化 接下来,(首先要进入目标目录.)要创建一个你的C ...

  6. 【bzoj4567】[Scoi2016]背单词

    4567: [Scoi2016]背单词 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1123 Solved: 476[Submit][Status][ ...

  7. 练习三十:Python回文数判断编程练习。

    说到回文数,大家可能会比较的陌生,但是在我们的日常生活中常会遇到这样的数字,只是你不知道它是回文数罢了. 例如:12321,这组数字就是回文数. 设n是一任意自然数.若将n的各位数字反向排列所得自然数 ...

  8. ABP框架和NET CORE实战

    http://www.fishpro.com.cn/2017/09/ ABP实战系列 ABP实战 ABP-第一个Asp.net core 示例(7)AutoMapper的使用 我们为什么需要使用DDD ...

  9. SpringBoot---核心---基本配置

    1.[入口类和@SpringBootApplication注解] 2.[关闭特定的配置] 3.[定制Banner] 1.1 修改Banner 1.2 关闭Banner 4.SpringBoot配置文件

  10. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...