欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CVE-2017-11882漏洞分析

程序员文章站 2022-03-08 07:54:13
...

Mr.Kevin
相关资料及软件在此:链接:https://pan.baidu.com/s/1qi-j3U-O6kH__cLA5O_2JA 密码:hjo1

漏洞复现
POC GitHub:可以使用国外出现的第一份poc:https://github.com/embedi/CVE-2017-11882,不过已经停止更新了。这里我使用:https://github.com/Ridter/CVE-2017-11882
使用clone或直接下载zip都行:

git clone https://github.com/Ridter/CVE-2017-11882.git

进入项目文件

root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "cmd.exe /c calc.exe" -o calc.doc
[*] Done ! output file --> calc.doc

至此,以验证该漏洞存在。想在0199的时候还需要自己避免交互,现在poc直接帮你解决。。。
漏洞关键点分析
1) 关键数据结构
  漏洞存在于Office的公式编辑器组件Eqnedit.exe(Equation Editor)中。Equation Editor和MathType都是Design Science开发的公式编辑软件,都采用MTEF(MathType’s Equation Format)格式来存储公式数据。EquationEditor生成的公式数据汇存放在Office 文档的一个OLEObject中,该object class为Equation.3,而obj data区存放的是公式的私有数据OLE Equation Objects。OLE Equation Objects包括两部分,头部是28字节的EQNOLEFILEHDR结构,其后则是MTEF数据:
  CVE-2017-11882漏洞分析
  MTEF数据则包括两部分,一部分是MTEF Header,一部分是描述公式内容的MTEF Byte Stream:
  CVE-2017-11882漏洞分析
  MTEF Byte Stream包括一系列的记录records,每一个record以tagbyte开始,tag byte的低4位描述该record的类型,高4位描述该record的属性。下面就是一个MTEF结构的二进制数据:
  CVE-2017-11882漏洞分析
  2) 漏洞溢出分析
该漏洞发生在从MTEF ByteStream中解析Font Record时出现栈溢出。下图是FontRecord的二进制数据:
CVE-2017-11882漏洞分析
Font Record结构如下:
CVE-2017-11882漏洞分析
对照上图的二进制数据,tagtype 是8,tface 为0x5A,style为0x5A,剩下的则是字体名字。在拷贝字体名字的过程中,eqnedt32会将字体名字拷贝到栈上一个大小为0x24字节的缓冲区中,而此时PoC样本中的字体长度为0x30,这样就可以成功的用0x430C12重写栈上的返回地址。存在漏洞的函数如下:
CVE-2017-11882漏洞分析
以下为我复现此漏洞时的参考文章,其详细介绍了此漏洞相关原理
(1)http://www.360zhijia.com/360anquanke/322865.html
(2)https://blog.csdn.net/Jun_ay/article/details/78609139
(3)https://www.cnblogs.com/wjvzbr/p/7889682.html

相关标签: Mr.Kevin