CVE-2010-3974:Windows 传真封面编辑器 FxsCover.exe 双重释放漏洞调试分析
0x01 堆空间申请后的双重释放
- Windows FxsCover 程序存储封面编辑器的信息,封面编辑器是传真服务的一个组件,通过解析特定的传真封面文件(.cov)时,会调用类析构函数对同一内存中的栈空间进行第二次释放,从而导致了双重释放的漏洞,所以本质也是 UAF 漏洞的一种
- 实验环境:Windows 7 + FxsCover.exe + Poc.cov(提取码:hdnr)
0x02 使用 Windbg + IDA 进行调试分析
- 打开传真封面编辑器,使用 Windbg 附加进程后拖入 Poc.cov,之后断在了如下位置
- 之所以断在了 RtlReportCriticalFailure 中,原因是由于临界区发生故障

- 顺手检查此时的堆栈情况,从调用情况可以看出由 CDrawDoc 类中的 Remove 函数调用了 CDrawRoundRect 类的析构函数,之后由析构函数调用 free 来释放 CDrawRoundRect 类中的资源;由于因为异常断了下来,所以肯定是 free 函数二次释放堆空间的结果

- 为了看的更明白,直接利用 IDA 载入之后看静态反汇编结果,由于没有开启系统的 ASLR,所以通过地址就可以很容易的找到 Remove 函数的地址,调用 Remove 函数之前传递了一个 struct CDrawObj 的结构体,当中保存着需要释放资源的对象

- 之后进入 Remove 函数,再如下位置发现析构函数的调用信息,push 1 说明释放的是单个对象,如果是 push 3 就说明释放的是对象数组,ecx 保存着释放对象的地址,由上面的栈信息分析需要出释放资源的对象是 CDrawRoundRect,最后调用了 CDrawRoundRect 类的析构函数进行释放资源的操作

- 直到了漏洞的原理,下面只需要找到需要释放堆空间信息即可,重新使用 windbg 载入 FxsCover.exe,拖入 Poc 样本后断在了和刚刚一样位置,这时可以不用理会,按 F5 继续运行,直到发生堆栈释放异常为止,如图所以断在触发异常的地方,查询一下 ecx 的地址,发现所在的内存空间已经变为了 MEM_FREE 状态,表示已经是释放过了

0x03 漏洞利用
- 对于双重释放的漏洞理论上利用起来还是很简单的,通过覆盖将要被二次释放的堆空间的虚表指针,这样就可以控制 call 的地址执行 shellcode 恶意代码;但是通过什么样的方法才能精确的覆盖,这就非常复杂了,需要视具体情况而定
- 参考资料:0day安全:软件漏洞分析技术 + 漏洞战争
CVE-2010-3974 的分析到此结束,如有错误,欢迎指正
CVE-2010-3974:Windows 传真封面编辑器 FxsCover.exe 双重释放漏洞调试分析的更多相关文章
- CVE-2018-0798:Microsoft office 公式编辑器 Matrix record 字段栈溢出漏洞调试分析
\x01 前言 2018 年 1 月 9 日,Office 公式编辑器再曝出新漏洞,编号为 CVE-2018-0798.提起公式编辑器大家都不陌生,之前的 CVE-2017-11882 和 CVE-2 ...
- CVE-2017-11882:Microsoft office 公式编辑器 font name 字段栈溢出通杀漏洞调试分析
\x01 漏洞简介 在 2017 年 11 月微软的例行系统补丁发布中,修复了一个 Office 远程代码执行漏洞(缓冲区溢出),编号为 CVE-2017-11882,又称为 "噩梦公式&q ...
- CVE-2018-0802:Microsoft office 公式编辑器 font name 字段二次溢出漏洞调试分析
\x01 前言 CVE-2018-0802 是继 CVE-2017-11882 发现的又一个关于 font name 字段的溢出漏洞,又称之为 "第二代噩梦公式",巧合的是两个漏洞 ...
- CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析
0x01 蜘蛛漏洞攻击包 前言:2012 年 2月,地下黑产中流行着一款国产名为蜘蛛漏洞的攻击包 -- "Zhi-Zhu Exploit Pack",该工具包含 5 个漏洞,都是在 ...
- [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码
1.在.vscode目录下,新建以下几个配置文件,当然也可以通过vscode命令自动生成,如果你已有这些文件直接修改即可. c_cpp_properties.json(代码提示): { "c ...
- Windows平台Atom编辑器的常用快捷键小抄Cheat Sheet
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows平台Atom编辑器的常用快捷键小抄Cheat Sheet.
- Windows 95 输入法编辑器
Windows 95 输入法编辑器 翻译:戴石麟译自微软的MSDN DDK 关于Windows 95的多语言IME(输入法编辑器) 在Windows 95中,IME以动态连接库(DLL)的形式提供,与 ...
- vs 2010创建Windows服务定时timer程序
vs 2010创建Windows服务定时timer程序: 版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处: http://www.cnblogs.com/2186009311CFF/p/ ...
- Failed to execute command: ""C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ResGen.exe" 的一个解决办法
最近在做wpf项目,期间下了一些源码参考,但是在build时经常遇到下面这种bug: Error 2 Failed to execute command: ""C:\Program ...
随机推荐
- sanic-jwt 的使用
Sanic 是基于 Python 的一个支持高并发的异步 web 框架,sanic-jwt 则是针对Sanic 开发的一个基于 PyJWT 封装的 JWT 授权认证模块. sanic-jwt 项目主页 ...
- spring-cloud-alibaba之Nacos
在微服务构架中,集群服务间的需要调用时就需要知道各个服务的IP和提供服务的端口等信息,如果每个部署一个服务就配置一次,那么必然时非常麻烦的,因此我们需要一个能够统一管理的东西来解决这个问题,由此诞生了 ...
- webpack4.x 从零开始配置vue 项目(二)基础搭建loader 配置 css、scss
序 上一篇已经把基本架子搭起来了,现在来增加css.scss.自动生成html.css 提取等方面的打包.webpack 默认只能处理js模块,所以其他文件类型需要做下转换,而loader 恰恰是做这 ...
- Codeforces Round #557 B. Double Matrix
题面: 传送门 题目描述: 给出两个n*m的矩阵,问:是否能通过交换两个矩阵"对应"位置的元素,使两个矩阵都为"递增"矩阵. "递增"矩阵定 ...
- 某SQL注入--报错注入payload
1.证明存在sql注入,根据这个报错语句,,有' 有% 2.payload 闭合语句 %' or (select extractvalue("anything",concat( ...
- css字体的属性
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 5行代码!完成bat病毒制作!!!
这个病毒的功能是删除当前目录下.cpp类型的代码. copy %0 "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\P ...
- 7、Spring教程之使用注解开发
1.说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 <dependency> <groupId>org.springframework</group ...
- Announcing cnblogs-hardening 1.0 Preview 1
Release Notes Write about coding Note About coding Share about coding Talk about coding Comment abou ...
- 开源项目月刊《HelloGitHub》第 60 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...