zoukankan      html  css  js  c++  java
  • 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漏洞的发生。
    

      

      

  • 相关阅读:
    excel使用总结
    使用spring的@Scheduled注解执行定时任务,启动项目不输出警告
    web.xml配置错误导致applicationContext.xml配置重复加载
    POI3.8解决导出大数据量excel文件时内存溢出的问题
    linux常用命令总结
    javax.mail 发送邮件异常
    eclipse下创建maven项目
    java单例模式的几种写法比较
    msql数据迁移,myisam及innoDB
    JS监听回车事件
  • 原文地址:https://www.cnblogs.com/elvirangel/p/8387779.html
Copyright © 2011-2022 走看看