IE 11 MSHTML!CPaste­Command::Convert­Bitmapto­Png heap-based buffer overflow学习

MS14-056, CVE-2014-4138

Time-line

8 May 2014: This vulnerability was submitted to ZDI.
9 June 2014: This vulnerability was acquired by ZDI.
23 June 2014: This vulnerability was disclosed to Microsoft by ZDI.
14 October 2014: This vulnerability was address by Microsoft in MS14-056.
21 December 2016: Details of this vulnerability are released.

越界访问漏洞

版本:Microsoft Internet Explorer 11.0.9600.16521

概述

图片被粘贴到IE11中,会把BMP格式转换成PNG格式,MSHTML!CPaste­Command::Convert­Bitmapto­Png函数执行这个操作。

这个函数使用BMP图片的大小来储存转换好的PNG图片,如果转换后的PNG大于BMP则会发生溢出

CPaste­Command::Convert­Bitmapto­Png 伪代码

  函数原型
Convert­Bitmapto­Png(
[IN] VOID* po­Bitmap,
UINT u­Bitmap­Size,
[OUT] VOID** ppo­Png­Image,
UINT* pu­Png­Image­Size
) {
// BMP到PNG的转换
CMem­Stm* po­CMem­Stm;
IWICStream* po­Wic­Bitmap;
STATSTG o­Stat­Stg;
TSmart­Array<unsigned char> po­Png­Image;
UINT u­Read­Size;
// Create a CMem­Stm for the PNG image.
Create­Stream­On­HGlobal(NULL, True, po­CMem­Stm);
// Create an IWICStream from the BMP image.
Initialize­From­Memory(po­Bit­Map, u­Bitmap­Size,
&GUID_­Container­Format­Bmp, &po­Wic­Bitmap)));
// Write BMP image in IWICStream to PNG image in CMem­Stm
Write­Wic­Bitmap­To­Stream(po­Wic­Bitmap, &GUID_­Container­Format­Png, po­CMem­Stm);
// Get size of PNG image in CMem­Stm and save it to the output variable.
o­CMem­Stm->Stat(&o­Stat­Stg, 0);
*pu­Png­Image­Size = o­Stat­Stg.cb­Size.Low­Part;
// Allocate memory for the PNG
//这一句产生问题,使用了BMP的大小给PNG分配内存
po­Png­Image->New(u­Bitmap­Size);
// Go to start of PNG image in CMem­Stm
po­CMem­Stm->Seek(0, STREAM_­SEEK_­SET, NULL, &p­Position­Low);
// Read PNG image in CMem­Stm to allocated memory.
//这一句读入PNG的内容,导致溢出
po­CMem­Stm->Read(po­Png­Image, *pu­Png­Image­Size, &u­Read­Size);
// Save location of allocated memory with PNG image to output variable.
*ppo­Png­Image = po­Png­Image;
}

POC

只有用js实现图片复制的脚本,图片本身需要另外生成

这个洞因为没有完整的POC所以我没有调,但是其实作者在概述里已经说的很清楚了,这个洞的成因比较有意思放在这里开阔一下思路。

【OOB】MSHTML!CPaste­Command::Convert­Bitmapto­Png heap-based buffer overflow学习的更多相关文章

  1. CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用

    作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...

  2. CVE-2016-10191 FFmpeg RTMP Heap Buffer Overflow 漏洞分析及利用

    作者:栈长@蚂蚁金服巴斯光年安全实验室 一.前言 FFmpeg是一个著名的处理音视频的开源项目,使用者众多.2016年末paulcher发现FFmpeg三个堆溢出漏洞分别为CVE-2016-10190 ...

  3. metasploit--exploit模块信息

    Name                                             Disclosure Date  Rank    Description ----           ...

  4. Kali linux 2016.2(Rolling)中的Exploits模块详解

    简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...

  5. BUFFER OVERFLOW 10 Vulnerability & Exploit Example

    SRC= http://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html THE VULNERABLE AND THE EXPLOIT     W ...

  6. sqlmap用法大全

    sqlmap参数详解: Usage: python sqlmap.py [options] Options(选项): -h, --help            Show basic help mes ...

  7. fuzz实战之honggfuzz

    Honggfuzz实战 前言 本文介绍 libfuzzer 和 afl 联合增强版 honggfuzz .同时介绍利用 honggfuzz 来 fuzz 网络应用服务. 介绍 honggfuzz 也是 ...

  8. An Assembly Language

    BUFFER OVERFLOW 3 An Assembly Language Introduction Basic of x86 Architecture Assembly Language Comp ...

  9. arcmap Command

    The information in this document is useful if you are trying to programmatically find a built-in com ...

随机推荐

  1. TLabel的FocusControl属性什麽意思

    但我们为Label设置了热键的时刻,我们按这个热键,就会移动核心倒FocusControl指定的控件上!例如,设置Label.Caption:='Test For FocusControl(& ...

  2. Delphi中如何实现模拟组合按键,如发送Ctrl+F的按键

    利用 keybd_event函数可实现,如下面的代码用以实现在一个公共菜单中模拟Ctrl_F按钮以调用DBGridEH的查找对话框功能:这是在一个ActionList中的某一Action的OnExec ...

  3. SSM框架 mapper.xml中 value的空值判断问题

    先看解决方案,其他的都是问题的出处 解决方案:if中使用 _parameter,#{value}不变 <if test="_parameter!='' and _parameter!= ...

  4. 【刷题】LOJ 6015 「网络流 24 题」星际转移

    题目描述 由于人类对自然资源的消耗,人们意识到大约在 2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177 年冬由于未知的原因,地球环境发生了 ...

  5. JXOI2017颜色 解题报告

    JXOI2017颜色 首先记录每个位置上颜色在序列中上次出现的位置 开两颗线段树,第一棵维护区间最大值,实际上是维护当前必须被删去的颜色的位置的最大值,第二棵则是维护区间和 首先倒着扫一遍,对于当前颜 ...

  6. [JSOI2007]文本生成器(AC自动机,DP)

    题目链接: 洛谷 LOJ BZOJ 题目大意:给定 $n$ 个只含大写字母的串(称为可读串),问有多少种只含大写字母的长为 $m$ 的串,包含至少一个可读串. $1\le n\le 60,1\le \ ...

  7. Kruskal重构树学习笔记+BZOJ3732 Network

    今天学了Kruskal重构树,似乎很有意思的样子~ 先看题面: BZOJ 题目大意:$n$ 个点 $m$ 条无向边的图,$k$ 个询问,每次询问从 $u$ 到 $v$ 的所有路径中,最长的边的最小值. ...

  8. spring data jpa createNativeQuery 错误 Unknown entity

    springdatajpa本地查询的时候,报错:org.hibernate.MappingException: Unknown entity: com.hzxc.guesssong.model.Que ...

  9. Atcoder Grand 012 C - Tautonym Puzzle

    题意: 构造一个字符串,使得这个字符串有只有n个形如AA这样的子序列. 神TM构造题不会做,, 我们构造一个长度为2*m的字符串,前m个是一个1-m的排列,后m个就是按顺序1-m. 这样这个串里符合要 ...

  10. [IOI2018] werewolf 狼人

    [IOI2018] werewolf 狼人 IOI2018题解 (其实原题强制在线,要用主席树) 代码: 注意: 1.下标从0~n-1 2.kruskal重构树开始有n个节点,tot从n开始,++to ...