CVE-2011-0065
| 环境 | 备注 | |
| 操作系统 | 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的更多相关文章
- 第一次亲密接触MSF
第一次亲密接触MSF Metasploit Framework介绍 Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇宙”之名的强 ...
- 第十七章 Metasploit Framework
渗透测试者的困扰▪ 需要掌握数百个工具软件,上千个命令参数,实在记不住▪ 新出现的漏洞PoC/EXP有不同的运行环境要求,准备工作繁琐▪ 大部分时间都在学习使用不同工具的使用习惯,如果能统一就好了▪ ...
- msf学习笔记
metasploit frame 这是一个渗透测试框架,围绕这个框架,我们就可以完成最终的目标,即渗透测试. 渗透测试者困扰:需要掌握数百个工具,上千条命令参数,很难记住. 新出现的漏洞PoC/EXP ...
- 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 ...
- [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)
正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
- http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html
http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html
- 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 ...
- CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis
目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...
随机推荐
- Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
- 洛谷P2583 地铁间谍
P2583 地铁间谍 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发 ...
- Bzoj3315 [Usaco2013 Nov]Pogo-Cow(luogu3089)
3315: [Usaco2013 Nov]Pogo-Cow Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 352 Solved: 181[Submit ...
- 了解HTTP协议和TCP协议
HTTP(超文本传输协议),互联网上应用最为广泛的一种网络协议.所有的www文件都必须遵守这个标准.HTTP是一个客户端和服务端请求和应答的标准(TCP):客户通过浏览器发起一个到服务器上指定端口的H ...
- nodejs动态路由
主要功能:根据输入路由的不同,加载访问不同的HTML页面 在这里我不得不说webstorm真的是一个很棒的开发工具,我学习nodejs也是用的它. 文件目录: first_server.js: 首先我 ...
- java基础第八篇之jdk1.5、jdk1.7、jdk1.8新特性
JDK5新特性 自动装箱和拆箱 泛型 增强for循环 静态导入 可变参数 枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单 ...
- 12pm 究竟是中午还是午夜
12pm是中午=12noon12am是午夜=12midnightMN-midnight(午夜,中午) AM是after midnight开头字母 PM是prior to midnight开头字母正中午 ...
- JMeter(6) jenkins测试报告及邮件优化
jenkins邮件 使用jenkins执行完任务自动将测试结果发送到邮箱,效果如下: 生成html报告 build文件设置 jenkins设置 SummaryReport写入邮件正文 ...
- mac 增加/usr/bin目录的操作无权限
起因:想要往/usr/bin目录下拷贝文件,提示: operation not permitted 解决办法: 1. 重启,启动中长安command+r进入恢复模式 2.顶部菜单拉中打开终端 3. 输 ...
- NET Core 2.0 介绍和使用
NET Core 2.0 特性介绍和使用指南 阅读目录 前言 特性概述 使用指南 .NET Core 2.0和1.0/1.1之间的关系 .NET CORE Rumtime改进 .NET Core SD ...