CVE-2012-3569:VMware OVF Tool 格式化字符串漏洞调试分析
0x01 简介
VMware OVF Tool 是一个命令行实用程序,允许您从许多 VMware 产品导入和导出 OVF 包。在 2.1.0 - 2.1.3 之间的版本中存在格式化字符串漏洞,通过修改任意地址的任意数据,覆盖栈中的返回值,稍加利用就可以达到执行任意代码的目的
调试环境:Windows 7 + VMware OVF Tool 2.1.0、调试工具:OD、样本:poc.ovf
样本 poc + VMware OVF Tool 2.1.0 利用包下载(提取码:km7j)
0x02 OD 调试
- 安装完 VMware OVF Tool 之后,命令行进入其目录,之后运行 poc.ovf 脚本发现如下报错信息,由于了解格式化字符串漏洞的原理,所以可以看出在打印出 AAAA… 字符之后将栈上的空间信息也打印了出来,应该是通过 %x 打印出来的
- 由于格式化字符串漏洞的特殊性,所以在程序载入 OD 崩溃之后,可以选择使用智能搜索查找字符串 “Invalid value” 的方式来查找有漏洞的打印函数,这也是分析格式化字符串漏洞的通用方法
- 这个就是马上要压入并且要打印出来的字符串,再往下有两个 std::basic_string 函数,这里可以推断出打印的函数是 C++ 的 std 负责打印,而不是使用 C 语言的 printf 打印。经资料显示 std::basic_string 的作用是分配一些字符串,而 std::basic_ostream 则负责将这些字符串打印出来
- 由于知道了打印函数,所以直接在打印函数上下断点,待程序断在 “Invalid value” 处的时候,再激活断点运行,终于找到了在 std::basic_string 之后的 std::basic_ostream 打印函数
- 接着一直 F8 往下执行,直到发生崩溃,这样就可以结合崩溃处和样本中的数据推算出格式化字符的位置(也可以结合 IDA 分析,不过那样太麻烦)
- 经过几次尝试,发现到达此处的时候栈上的数据已经全部变为 ‘0’ 了,为什么会变为 ‘0’ 呢,因为 ebp 修改了 esp 的值,而 esp 是栈顶的指针;一般情况下 ebp 是不会被修改的,只有可能被格式化字符串给修改了
- 下面需要找到 ebp 是何时被修改的,结果是在 ovftool.00417280 函数的结尾把栈上的数据 0x 00180345 pop 到 ebp 中,记下此时栈顶的位置是 0x0018FF18
- 可以看到此时 ebp 的值为 0x00180345
- 然后看一下 poc 样本中的数据,由于格式化字符非常明显,所以一眼就能看到;在经过了若干个 %08x 的打印栈上数据之后,最后用了一个 %hn 将栈上的数据覆盖为字符串的长度
- 其中 %08x 的个数是 98 个,‘A’ 字符的个数是 26 个,%hn 之前的字符串长度为 (98 * 4 + 26) * 2 = 344 + 1 = 345,这里是宽字符打印
- %08x 是 98 个,这个的意思就是经过 98 个 %08x 打印之后才会修改栈上的数据,也就是上面修改 esp 的值,刚刚修改 ebp 的时候栈顶为 0x0018FF18,而 98 个 %08x 打印的栈上数据的长度为 98 * 8 = 0x310,再拿 0x0018FF18 - 0x310 = 0x0018FC08
- 再次运行到 “Invalid value” 字符串的位置查找栈地址 0x0018FC08,并且数据窗口跟随,往下寻找就会发现格式化字符的位置
- 此时 0x0018FF18 地址的值也被修改了
- 总结:CVE-2012-3569 巧妙的利用了格式化字符串漏洞,通过 98 个 %08x 定位栈地址,最后通过 %hn 将之前字符串的大小 0x345 覆盖栈地址值的高位,也就是刚刚的 0x0018FF18 的地址,做完了这些,那么被覆盖的值就会乖乖的弹出到 ebp 寄存器中,从而修改了 esp 的值…
0x03 利用
由于这个格式化字符串的可以将任意数据覆盖任意栈地址,那么利用起来就和栈溢出利用是相似的,就是覆盖函数的返回地址,通过 ROP 避开 DEP,寻找没有被 ASLR 保护的模块避开 ASLR 等等,相比其他漏洞利用起来还是非常容易的
参考资料:0day安全:软件漏洞分析技术 + 漏洞战争
CVE-2012-3569 的分析到此结束,如有错误,欢迎指正(天哪终于分析完了)
CVE-2012-3569:VMware OVF Tool 格式化字符串漏洞调试分析的更多相关文章
- Linux pwn入门教程(6)——格式化字符串漏洞
作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进 ...
- Linux pwn入门教程——格式化字符串漏洞
本文作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42943-1-1.html 0×00 printf函数中的漏洞printf函 ...
- 格式化字符串漏洞利用实战之 0ctf-easyprintf
前言 这是 0ctf 的一道比较简单的格式化串的题目. 正文 逻辑非常简单 do_read 可以打印内存地址的数据,可用来 泄露 got. leave 格式化字符串漏洞. printf(s) 直接调用 ...
- 格式化字符串漏洞利用实战之 njctf-decoder
前言 格式化字符串漏洞也是一种比较常见的漏洞利用技术.ctf 中也经常出现. 本文以 njctf 线下赛的一道题为例进行实战. 题目链接:https://gitee.com/hac425/blog_d ...
- Linux下的格式化字符串漏洞利用姿势
linux最早的漏洞防护机制nx-stack刚刚出现后就有人想出了突破方法.那就是只有栈是不可执行,而除了栈以外的其他地方还是可以执行的,只要把返回地址执行别的地方就可以. 一.格式化字符串漏洞 格式 ...
- 通过格式化字符串漏洞绕过canary
1.1 canary内存保护机制 1.1.1 canary工作原理 canary保护机制类似于/GS保护机制,是Linux下gcc编译器的安全保护机制之一,在栈中的结构如下图所示: 在函数 ...
- [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】
YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出[高危] 问题描述: YS VTM模块开放对外监听端口(8554和8664),此次使用sulley fuzzing框架对监听在8664端口 ...
- 格式化字符串漏洞 format string exploit(一)
本文系原创,转载请说明出处 本文为基于CTF WIKI的PWN学习 0x00 格式化字符串原理 先附一张经典的图,如下 其栈上布局如下: some value 3.14 123456 addr of ...
- CTF必备技能丨Linux Pwn入门教程——格式化字符串漏洞
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
随机推荐
- java 方法详解
什么是方法 方法的定义和调用 值传递与引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递. 特点:传递的是值的拷贝,也就是传递后就互不相关了. 引用传递:指的是在方法调用时,传递的参数 ...
- P2055 [ZJOI2009]假期的宿舍 题解(二分图)
题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...
- maven 常用命名
maven项目,在命令行中操作,非常简洁.高效,现将maven项目常用命令行总结如下: maven命令行命令总结 序号 整理 统计 命令 作用 1 基本 5 mvn -v 查看maven版本 2 mv ...
- requirejs的用法
requirejs的用法 2014年11月6日 17164次浏览 之前我的一片文章介绍过requirejs,具体地址是:http://www.haorooms.com/post/RequireJS_m ...
- canvas-修改图片亮度
canvas操作-修改图片亮度 目录 canvas操作-修改图片亮度 图片亮度的概念 下面用ps截图举一个例子: 调整图片亮度的方案 实现方案一 从RGB到HSV的转换 转换的公式 javascrip ...
- 从零学脚手架(七)---webpack-dev-server使用
如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli webpack-dev-server使用 什么是webpack-dev-server 使用vue-cli .re ...
- C#控制鼠标自动连续点(DEMO)
---------------------------界面---------------------------------------------------- ------------------ ...
- P1603 斯诺登的密码(JAVA语言)
//这题有点坑 题目背景 根据斯诺登事件出的一道水题 题目描述 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早 ...
- springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术
知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...
- 比Django官方实现更好的分页组件+Bootstrap整合
前言 Django全家桶自带的分页组件只能说能满足分页这个功能,但是没那么好用就是了 Django的分页效果 django-pure-pagination分页效果 使用方法 首先安装: pip ins ...