产生原因:

  UAF漏洞的成因是一块堆内存被释放了之后又被使用。又被使用指的是:指针存在(悬垂指针被引用)。这个引用的结果是不可预测的,因为不知道会发生什么。由于大多数的堆内存其实都是C++对象,所以利用的核心思路就是分配堆去占坑,占的坑中有自己构造的虚表。

  分析方式:

  触发UAF漏洞需要一系列的操作,而不是像传统的溢出一个操作就会导致溢出。IE浏览器中的DOM标签由一个对象来表示,并且IE自带的类中存在了一些对象管理的方法。分析UAF漏洞的要点在于搞清楚对象是在哪里被分配的,哪里被释放的,哪里被重用的。UAF的异常触发点是很明显的,就是对已释放的对象进行操作导致的异常。所以异常点也就是重用点。而由于是对对象的操作,可以列出这个对象的所有方法,找出分配和释放的方法,对其下断来分析到底是怎么发生的UAF过程。

  首先要说明2个概念:

  1.   悬垂指针:悬垂指针是指一类不指向任何合法的或者有效的(即与指针的含义不符)的对象的指针。比如一个对象的指针,如果这个对象已经被释放或者回收但是

指针没有进行任何的修改仍然执行已被释放的内存,这个指针就叫做悬垂指针

  2.  UAF漏洞:Use-After-Free是一种内存破坏漏洞,简单的说,漏洞的原因是使用了悬垂指针。

  

  IE浏览器DOM树的实现原理,这是根本

  常见的与UAF漏洞配合使用的就是堆喷射了,堆喷射的思想就是分配大量内存,增大靶子的面积。使EIP能跳进分配的内存中。而分配的内存中又充满了滑板指令,只要命中了滑板指令就可以命中Shellcode。为了利用UAF漏洞,要理解漏洞触发的时机,涉及的对象等。然后通过Js来精心布局内存并控制EIP的控制权。

  注意的是,对于UAF漏洞来说,调试器捕获的异常往往都不是漏洞发生的第一现场,所以一般都要使用gflags开启PageHeap和UST,命令如下(windbg自带gflags工具)

  1. gflags.exe /i 程序名.exe +hpa +ust

  这样调试器就会定位到最先出错的位置

  此外有如下技巧:

  • 在IDA里查找函数后,在Windbg里下断。如果知道了一个对象的一个方法却不知道怎么断下它,就用IDA加载符号,搜索方法。说不定就能找到对应的C++函数名。
  • 1.打开poc文件后,出现crash就是对象被重用,根据crash地址来找到重用的对象起始地址。
  • 2.对对象起始使用!heap -p -a 地址。就可以获得这个对象的分配信息,由回溯还可以知道是什么函数分配的
  • 3.对分配函数下断来达到分配现场
  • 4.如果!heap -p -a 地址 后得到的是释放的回溯,那么怎么知道分配函数呢?答案是在释放函数上下断,然后断到那里时使用!heap -p -a 地址得到的就是分配的回溯了,计划通。
  • 在回溯中,所谓的分配函数一般就是RtlAllocateHeap的上层。而释放函数一般就是FreeHeap的上层(或者RtlFreeHeap?)

一个页面包含CMarkup对象来表示页面的结构或者DOM数。CMarkup对象包含一个指向根CElement对象的指针。CElement对象是很多实体类的父类。在图1中Javascript对象e_1和e_2是继承自CElement的CObjectElement对象。CElement对象存在一个指向CTreeNode对象的指针。CTreeNode对象还存在一个与CElement对象相关的指针。CTreeNode的对象有一对指向CTreePos对象的指针。

那为什么一个CTreePos是必须的?因为IE使用了伸展树算法(Splay Tree)来操控DOM树。在伸展树算法树中CTreePos对象作为一个节点。CMarkupPointer对象代表CMarkup对象中的一个地址。所以CMarkupPointer对象有一个指向CTreePos对象的指针来代表他的地址。CMarkup对象有很多与UAF相关的状态。

l 嵌入状态:这意味着CMarkupPointer创建了CTreePos对象并加入了伸展树中。

l 非嵌入状态:这意味着CMarkupPointer把CTreePos对象移出伸展树并释放。

下图展示了伸展树的交互过程:

通过

UAF漏洞学习的更多相关文章

  1. PWN——uaf漏洞学习

    PWN--uaf漏洞 1.uaf漏洞原理 在C语言中,我们通过malloc族函数进行堆块的分配,用free()函数进行堆块的释放.在释放堆块的过程中,如果没有将释放的堆块置空,这时候,就有可能出现us ...

  2. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  3. exim CVE-2017-16943 uaf漏洞分析

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这是最近爆出来的 exim 的一个 uaf 漏洞,可以进行远程代码 ...

  4. Typecho-反序列化漏洞学习

    目录 Typecho-反序列化漏洞学习 0x00 前言 0x01 分析过程 0x02 调试 0x03 总结 0xFF 参考 Typecho-反序列化漏洞学习 0x00 前言 补丁: https://g ...

  5. XXE漏洞学习笔记

    XXE 参考文章 名称 地址 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357 Web Hacking 101 https://wizardforce ...

  6. CVE-2013-3346:十全九美的 Adobe Reader ToolButton UAF 漏洞

    0x01 "Epic Turla" 网络间谍行动 在 2014 年 8 月,被誉为 "世界十大最危险的网络攻击行动" 之一的 "Epic Turla& ...

  7. CVE-2013-1347:Microsoft IE CGenericElement UAF 漏洞利用样本分析

    CVE-2013-1347 漏洞是典型的 IE 浏览器 UAF 漏洞,所以其利用方法和一般的 IE 浏览器漏洞的利用方法非常相似,所以流程大体上可以分为这些步骤:(1) 对象被释放 (2) 精确覆盖被 ...

  8. CVE-2013-1347:从入门到放弃之调试分析令人崩溃的 Microsoft IE CGenericElement UAF 漏洞

    0x01 2013 年 "水坑" APT 攻击事件 在 2013 年 5 月,美国的劳工部网站被黑,利用的正是 CVE-2013-1347 这个漏洞,在当时导致大量使用 IE8 访 ...

  9. PWN二进制漏洞学习指南

    目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...

随机推荐

  1. Atom实用配置插件for C++

    autocomplete-clang  自动补全 autocomplete for C/C++/ObjC using clang autocomplete-python 自动补全 Python pac ...

  2. mysql三-6:完整性约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KE ...

  3. 由保存当前用户引发的springboot的测试方式postman/restlet还是swagger2

    今天在测试接口的到时候发现用springboot集成swagger2集成的项目,在测试session保存的当前用户的时候,发现执行不了,没有像postman或者restlet一样,保存这个接口的url ...

  4. 手脱UPX v0.89.6 - v1.02

    声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 > pushad ; //入口 BE mov es ...

  5. js 时间戳 转化

    new Date((1524142795*1000)).toJSON().slice(11,16)

  6. 管理lnmp常用命令,lnmp重启,start|stop|reload|restart等命令

    LNMP状态管理命令: LNMP状态管理: /root/lnmp {start|stop|reload|restart|kill|status}Nginx状态管理:/etc/init.d/nginx ...

  7. vue-router路由原理

    Vue-router路由原理 目前实现路由的方式有两中,vue通过参数mode来设置,默认是hash模式. 利用URL中的hash(‘#’)来实现 利用History interface在HTML5中 ...

  8. CentOS7,安装Tomcat8.5、JDK1.8,并设置开机启动(Linux CentOS Tomcat、JDK+Tomcat、Tomcat开机自启动)

    1.下载JDK1.8.Tomcat8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  9. 分享一个数据库sql_mode 引起的坑

    sql_mode坑 MySQL 5.7.x 默认值: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR ...

  10. 网络流入门--最大流算法Dicnic 算法

    感谢WHD的大力支持 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3,4},有向管道{A,B,C,D,E},即有向图一张.  ...