漏洞丨实例分析cve2012-0158

news2024/11/26 8:33:16

作者:黑蛋

作者:黑蛋

一、漏洞简介

CVE-2012-0158是一个office栈溢出漏洞,Microsoft Office 2003 sp3是2007年9月18日由微软公司创作的一个办公软件,他的MSCOMCTL.ocx中的MSCOMCTL.ListView控件检查失误,由于读取长度和验证长度都在文件中,这样参数可以人为修改,触发缓冲区溢出漏洞。

二、漏洞环境准备
系统版本

目标程序

调试软件

16进制编辑器

XP SP3

Microsoft Office 2003

od、x32dbg

010Editor

三、漏洞验证
这里我借用了一个帖子的POC,借用POC帖子([原创]CVE-2012-0158分析-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com)
在XP SP3中安装office2003:

 

之后下载POC。拖到虚拟机中,用office打开,弹出个计算机(注意这个POC用一次会损坏,需要备份):

 

四、漏洞分析
首先用OD附加office,F9运行,然后用office打开POC文件(新的):

 

查看堆栈:

 

 

啥也没看出来,堆栈前后看了一下也没发现形似shellcode的东西,下了几个断点也没有,只能另寻他法!

俩个办法

(1)把POC拖到010Editor看看有没有特征可以看看
(2)对弹出计算器用到的函数下断点

先用第一个办法:
拖到010Editor中,搜搜有没有9090(nop滑板指令,大部分会有这种指令用来凑数或者保护数据等)之类的,运气不错,找到相似的。

 

9090909090909090前面有四个字节,像一个库里面的地址7FFA4512,后面一堆看着像shellcode,附加office,看看这个地址是个啥东西:

 

一个jmp esp,典型的跳板指令,差不多就是这个地方溢出返回值,我们尝试改一下这里,验证一下:

 

把这个跳板改成11111111试试:

 

保存,OD附加office,打开poc,EIP果然等于11111111:

 

这就算撞到了溢出点,我们用原来的POC,在jmp esp这里下硬件断点看看堆栈情况:

 

断点断在jmpesp,继续运行,到了shellcode的地方:

 

从这里也能够看出溢出函数末尾是ret 8,esp直接+8,F8运行几步,弹出计算器:

 

我们试着替换shellcode,改成自己的弹窗shellcode,不改变文件原来大小,替换掉9090909090909090后面的shellcode就行,因为我的shellcode结尾会自动退出程序,所以不需要管原来shellcode长度过长的问题,但是这里卡了一个bug,修改完shellcode之后,并没有出现弹窗,猜想可能是我们自己的shellcode结尾接了原来的字节码,导致识别出错,于是我把我们的弹窗shellcode后面8字节改成90,成功弹窗(这里发现改过得POC不再是一次性的了,可能是因为弹窗shellcode长度较小,不会被破坏):

 

下面给出我刚才替换的弹窗shellcode:

FC 68 6A 0A 38 1E 68 63 89 D1 4F 68 32 74 91 0C
8B F4 8D 7E F4 33 DB B7 04 2B E3 66 BB 33 32 53
68 75 73 65 72 54 33 D2 64 8B 5A 30 8B 4B 0C 8B
49 1C 8B 09 8B 69 08 AD 3D 6A 0A 38 1E 75 05 95
FF 57 F8 95 60 8B 45 3C 8B 4C 05 78 03 CD 8B 59
20 03 DD 33 FF 47 8B 34 BB 03 F5 99 0F BE 06 3A
C4 74 08 C1 CA 07 03 D0 46 EB F1 3B 54 24 1C 75
E4 8B 59 24 03 DD 66 8B 3C 7B 8B 59 1C 03 DD 03
2C BB 95 5F AB 57 61 3D 6A 0A 38 1E 75 A9 33 DB
53 68 66 66 66 66 68 66 66 66 66 8B C4 53 50 50
53 FF 57 FC 53 FF 57 F8

这是替换shellcode结尾部分:

 

这是一次简单的替换,接下来我们继续分析这个漏洞的前因后果,我们使用改过的的弹窗POC,我们在jmp esp处下断点:

 

断点断在jmp esp处,我们在栈的前面发现调用了一个MSCOMTL模块的函数,我们调到对应的地址上面,记录这个地址275C8A0A,并下断点:

 

重新运行,断在了断点处:

 

F8单步调试,发现这个函数结束后,弹窗弹出,说明这个函数就是关键函数,而结尾也如我们之前所想,是ret 8:

 

接下来就是着重分析这个函数,重新调试,断在这个函数头部(push ebp是函数头):

 

我们发现执行完下面这个函数,返回值被修改,我们shellcode拷贝进去,也即是说这个拷贝函数是关键函数:

 

继续分析这个函数,下断点,重新运行,断在关键函数

这里:

 

F7跟进去,分析函数:

 

拷贝参数ECX=8282,这是一个关键点,拷贝之后,返回地址被淹没,因为这个漏洞就是因为拷贝长度都在文本中存着,所以我们试着在POC中搜索8282:

 

这里有俩个8282,我们都修改一下,分别改成1111和2222,再回到这个函数观察:

 

可以看到数据已经不同,有点缺陷是我们改的姿势不对,数据变成02001111和02022,接下来运行会卡住,所以这里是一个验证代码,俩个数值只能相等,继续把俩处地址改成2222,直接观察关键函数里面拷贝那块的ECX赋值结果:

 

 

和我们预期一样,文本中原来2个8282是拷贝字符串长度还有其验证,俩者必须一样,其次会根据这个数值对字符串进行拷贝。下面给一张图解:

 

前俩个红线处是拷贝长度还有其验证数值,第三个红线是一个jmp esp跳板,之后隔八字节就可以放shellcode。

五、结束
CVE-2012-0158这个漏洞分析到此结束。

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

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

相关文章

MySQL数据库Linux系统安装tar包

MySQL数据库Linux系统安装tar包 使用的远程工具是mabaxterm,使用此工具连接linux服务器, 第一步先把mysql安装包拖到远程工具的目录里:/usr/local 第二步:cd到local目录下解压数据库mysql 命令: cd …/usr/local 解压数据库masq…

endo BCN-PEG4-COOH,1881221-47-1,endo BCN-四聚乙二醇-羧酸特点分享

●外观以及性质: endo BCN-PEG4-acid含有BCN基团和羧酸基团,酸基团可以在偶联条件下与胺反应形成酰胺键。BCN基团可以发生点击化学反应。 【产品理化指标】: ●中文名:endo BCN-四聚乙二醇-羧酸 ●英文名:endo BCN-P…

APS智能排产帮助LNG船舶生产厂家充分利用产能,提升生产效益

前一段时间,由于欧洲各国集中储备天然气准备过冬,引发全球对LNG船舶,也就是液化天然气运输船的需求持续增加。一艘LNG船单日租金成本已跃升至近40万美元(约合人民币283万元),同比增长340%以上,一…

测试面试 | 某 BAT 大厂测试开发面试真题与重点解析

image1080677 64.8 KB 本文作者 J2W 为霍格沃兹测试学院《测试开发实战进阶》班优秀学员,4 个多月从初出茅庐、勉勉强强的初级测试开发快速成长,成功拿下某 BAT 大厂中级测试开发岗位 Offer,并获得学院奖学金。助教老师对其一致评价是「学习非…

程序人生:自学上岸自动化测试薪资20K,我的经验值得想进阶的朋友借鉴...

经常有人问过这样一个问题:‘’自动化测试是真的这么厉害吗?如何从零成为自动化测试工程师?” 我之前写过这样一篇文章【从功能测试进阶自动化测试,熬夜7天整理出这一份超全学习指南【附网盘资源】】 厉害不厉害在于你有没有扎实…

java-爬虫-es

文章目录1.数据来源:数据库、mq、爬虫2.爬虫:获取想要的页面数据1.导入依赖2.爬取核心部分编码3.测试解析成功4.封装对象5.引入es配置类6.将HtmlParseUtil注册到spring7.爬取的数据入es库8.空白文件初始化vue文献:https://www.kuangstudy.com…

Java程序员的技术进阶成长路线

据不完全统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万。而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大。那么,作为一名Java初级程序员,怎…

【财务】FMS财务管理系统:礼品卡管理

本文总结了FMS财务管理系统中的礼品卡管理,以及如何根据不同类型卡的流程和管理,进行相应的账务处理。 目前在各大电子商务网站或APP购买商品时,在支付时有很多网站都可以使用礼品卡,对于礼品卡的管理也是公司及财务部重点关注的&…

[附源码]Nodejs计算机毕业设计基于WEB的心理测评系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Django期末考试复习

目录一、Django复习内容二、建立一个项目1.进入环境2.建立项目3.打开文件三、建立APP1.进入View文件2.进入Django环境3.建立App四、注册超级用户1.INSTALLED_APPS配置2.建立模型3.数据库的迁移4.进入环境注册超级用户5.开启服务器五、配置数据库一、Django复习内容 二、建立一个…

【云原生进阶之容器】第一章Docker核心技术1.4节——chroot技术

1. 背景 1.1 什么是 chroot chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。 1.2 为何使用 chroot 在经过 chroot 之后,…

git merge 命令详解

1. 前言 2. 合并场景之 Fast-forward(快速合并) 3. 合并场景之 three way merge(三路合并之正常合并) 4. 合并场景之 three way merge(三路合并之冲突合并) 5. 中止合并 1. 前言 将指定分支合并到当前分支…

继承中国元宇宙之父钱学森先生“灵境”的概念产物—XR电影《告别核桃》代表了什么?

元宇宙大家都不陌生吧,那么你听说过“灵境”吗?你知道“灵境”与元宇宙XR影片《告别核桃》有什么关系吗?在2021年12月9日举行的2021元宇宙产业论坛上,钱学森线上30年前55份珍贵的手稿曝光。原来早在1990年,钱学森就曾在…

MATLAB高通滤波与低通滤波GUI实现代码

1.需搭建的GUI界面 两个axes,一个用于导入原始图像,一个用于输出处理后的头像,并且记好他们的Tag,在代码里会用到 2.导入图片功能代码实现 给一个String为导入图片的button添加callback函数,在这里提供了多种方法 f…

订单增2倍?如何利用促销手段瞄准圣诞季高意向顾客?

圣诞节作为一个类似于中国春节的节日,在12月的最后一周拉开帷幕,据有关业内人士称,作为拥有众多全球站的亚马逊电子商务平台在此次圣诞节的促销狂欢节中表现似乎稍显停滞,其作为电商领域的龙头企业,没能守住其销售总额…

C++对象的初始化和清理,构造函数,析构函数,深拷贝,浅拷贝,初始化列表,静态成员变量,静态成员函数

目录 1、构造函数和析构函数 2、构造函数的分类及调用 3、拷贝构造函数的调用时机,什么时候会用到拷贝构造函数 4、构造函数的调用规则 4.1只要写了一个类,C编译器都会给每个类至少添加三个函数 4.2如果我们写了有参构造函数,编译器就不再…

jsp+ssm计算机毕业设计“原创音乐爱好者”交流网站论文【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

java基础讲义05-数组

数组学习一 一维数组1.1 数组介绍1.2 多个变量和数组对比1.3 数组的定义和初始化1.3.1 数组定义1.3.2 数组初始化1.4 数组访问二 数组内存结构2.1 JVM内存介绍2.1.1一个数组对象的内存图2.1.2常见异常处理三 数组常见操作四 二维数组4.1 二位数组介绍4.2 二维数组定义和初始化4…

C语言---指针初阶---总结

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:鹏哥带我学c带我飞 💬总结:希望你看…

工业4.0 资产管理壳学习笔记( 6)-管理壳细节

本文是“资产管理壳细节 Part1的读书笔记。 <Details_of_the_Asset_Administration_Shell_Part1_V3.pdf> 要真正了解工业4.0 的管理壳&#xff0c;绕不开认真地读这篇文章。老实说&#xff0c; 第一次读这个文本会发现什么都明白&#xff0c;就是不知道有什么用场。其实学…