cve-2015-5122漏洞分析
HackTem爆出的第二枚0day,分析了下,做个记录。
Poc中一开始会分配一个Array类型的_ar结构。
第一次赋值
此时在a[0 ] –a[1e-1] 处已被赋值为Vector.<uint>(62)结构。
任意查询可发现给vector的长度已被赋值为62生成的array 0~1e
之后对1e~7e间的ar[i]进行赋值,每个模块为Vector.<uint>(8),其中第一个字节设置标记位,用于之后快速定位越界单元。
查看对应的内存,可以发现1e~7e中为长度为8的Vector.<uint>(8)
a[i]中被赋值之后的数组1e~2e处已被赋值
总的a[i]内存
对a[i]中1e~2e处的单元进行赋值,赋值对象为一个TextLine对象
开始赋值
赋值结束之后的内存空间
此时a[i]中赋值完毕,整体的a结构
获取对应的textline的对象
对a[i]中1e~2e中的textline单元设置opaqueBackground属性,该属性会导致avm为每个单元分配大小为0x390的内存空间
获取对应的textline对象
首先调用0418e3b3处的函数用于返回对应的textline单元,获取该单元之后在0418e3fecc处通过call eax 创建0x390大小的内存,在该函数中随后会有对valueOf2的操作进行判断,成功的话会由此进入valueOf2的判断,从而导致uaf,而在call eax返回前会对0x390的内存空间偏移0x320的地方进行6a的赋值,通过精心的内存布局,可致使6a被写入到vector的length域中。
整个内存分配结束之后
生成的vector<uint>(62)
生成的Vector<8>
生成的backGroundObj空间
对textline对象的opaqueBackgroind属性进行赋值,此处赋值的对象为MyClass32,由于array为Byte属性,此时赋值的话将导致MyClass类的valudfo函数调用。
进入valueOf函数中,对a[i]中的textline对象进行释放,大小
释放前的backgroudObj
完全释放5个backgroudObj之后。
释放之后立即,对a[i]中1e~7e的数据单元的长度进行重置,由于avm中的内存管理机制,会导致之前分配的内存被优先分配,从而致使之前释放掉的5个backgroudObj的内存被重新分配的ar数组中的十个单元所占有。
如下图所示内存出处最后一个单元外,之前所有的单元已经重新分配完毕
通过对比释放掉的五个backgroundObj,此处可以在内存中搜索出是那几个单元重用了之前释放的内存,如下图所示。
之前提到该操作会导致对应MyClass类的ValueOf函数被调用,在该函数中我们释放5个backgroundObj对象,同时使用通过重置ar[i]中1e~7e单元的大小,重新占有了这5个backgroundObj对象之前的空间,ValueOf函数返回后,在其后的对应操作中,会对之前的5个backgroundObj对象中x320的位置进行想x190的赋值操作,由于重置之后的ar[i]单元大小为x190,因此正好导致其中某处单元的vector的长度值从62被设置为6a。
整个过程如下图
被设置的ar[3b]单元,可见此处的length域已经被赋值为6a。
获取越界的a[i],并将其相邻的vector结构的长度设置成40000000,因而获取一个超长的全内存读写vector
生成的全局内存读写vector
cve-2015-5122漏洞分析的更多相关文章
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
- PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- Intel CPU 漏洞分析
Intel CPU漏洞分析报告 预备知识 存储分级 由于计算机存储分级的特性(第一级:寄存器,第二级:高速缓存,第三级:内存,第四级:磁盘),每一级之间的访问速度差距高达数量级.所以处理器会将用到的数 ...
- Elasticsearch 核心插件Kibana 本地文件包含漏洞分析(CVE-2018-17246)
不久前Elasticsearch发布了最新安全公告, Elasticsearch Kibana 6.4.3之前版本和5.6.13之前版本中的Console插件存在严重的本地文件包含漏洞可导致拒绝服务攻 ...
- ThinkCMF X2.2.2多处SQL注入漏洞分析
1. 漏洞描述 ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架,其中X系列基于ThinkPHP 3.2.3开发,最后更新到2.2.2版本.最近刚好在渗透测试 ...
- 看个AV也中招之cve-2010-2553漏洞分析
试想:某一天,你的基友给你了一个视频文件,号称是陈老师拍的苍老师的老师题材的最新电影.avi,你满心欢喜,在确定文件格式确实为avi格式后,愉快的脱下裤子准备欣赏,打开后却发现什么也没有,而随后你的基 ...
随机推荐
- JS Select 月日日期联动
Js对Select控件进行联动操作,一个select选择月份后另一个select生成对应月份的所有日期. <%@ Page Language="C#" AutoEventWi ...
- SDL绑定播放窗口 及 视频窗口缩放
绑定播放窗口 必须在Sdl.SDL_Init之前执行 Sdl.SDL_putenv 同时SDL_SetVideoMode里播放窗口长宽不能大于绑定窗口的长宽 int i = Sdl.SDL_puten ...
- 图解TCP、IP笔记
七层:应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 应用层:与通信无关的功能 表示层:例如转换编码格式 会话层:采用哪种连接方法 传输层以下: 传输层:确立连接与断开连接重发 网络层:从 ...
- Hbase过滤器Filter的使用心得(爬坑经验)
Hbase 的过滤器是个好东西.. 给这种非关系型数据库本来不能复杂查询的情况得到了很好的扩展..提供了很多的帮助.. 但是Filter的种类何其之多..让人眼花缭乱.. 譬如..分页类型的PageF ...
- SQL中SET和SELECT赋值的区别
最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果. 那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢? 经过网上的查询,及个人练习,总结两者有以下几点主要 ...
- JavaScript方法call、apply、caller、callee、bind的使用详解及区别
一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). 即 “某个方法”当做“指定的某个对象”的“方法”被执行. Js代 ...
- Android 学习笔记
1.sleep(),wait(),notify(),notifyAll() sleep()是线程类的静态方法,阻塞线程一定时间后再次使线程处于可以被调度运行的状态wait(),notify(),not ...
- r-cnn学习(五):SmoothL1LossLayer论文与代码的结合理解
A Loss Function for Learning Region Proposals 训练RPN时,只对两种anchor给予正标签:和gt_box有着最高的IoU && IoU超 ...
- AJAX工作原理及其优缺点
1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...
- JavaScript 加载动画Canvas 设计
var c = document.getElementById('c'), ctx = c.getContext('2d'), cw = c.width = 400, ch = c.height = ...