产生原因:

  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工具)

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. vs2003一查找就卡死了

    Visual Studio 2003一查找就卡死了.解决办法如下: win7 32位下 解决方法:找到VS2003的安装目录,修改"...\Microsoft Visual Studio . ...

  2. Codeforces Round #209 (Div. 2)A贪心 B思路 C思路+快速幂

    A. Table time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  3. HDU--1010

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 分析:dfs+奇偶剪枝.   Tempter of the Bone #include<c ...

  4. wordpress初始化安装

    数据名,用户名,密码的选择: 从主机购买商的控制面板里面查询: 然后填入到WordPress数据库初始化页面..

  5. Rabbitmq -- direct

    一.前言 RabbitMQ还支持根据关键字发送,即:队列绑定关键字,发送者将数据根据关键字发送到消息exchange.direct类型的Exchange路由规则也很简单,它会把消息路由到那些bindi ...

  6. 「Python」10个python项目

    1. Pillow. Pillow是由Alex Clark以及其他贡献者实现的“友好版”的PIL.PIL即Python Imaging Library,作者是Fredrik Lundh及其他开发者.A ...

  7. P4753 River Jumping

    P4753 River Jumping 题目描述 有一条宽度为 NN 的河上,小D位于坐标为 00 的河岸上,他想到达坐标为 NN 的河岸上后再回到坐标为 00 的位置.在到达坐标为 NN 的河岸之前 ...

  8. OpenCV---膨胀与腐蚀

    膨胀 腐蚀 一:膨胀实现dilate import cv2 as cv import numpy as np def dilate_demo(image): #膨胀 print(image.shape ...

  9. 1.Spring揭秘--Ioc容器

    1.Ioc即控制反转,假设一个类需要依赖另外一个类,在最初始的做法就是创建那个依赖类的对象,然后使用这个类提供的功能,如果创建这个依赖类的职责交给Ioc Service Provider去做,那么这就 ...

  10. HDU 2920 分块底数优化 暴力

    其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...