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 ...
随机推荐
- linux时间问题
如果遇到创建时间和更新时间,不一致,先将时间调整为一致. 导致不一致的原因可能是时区不对,使用 tzselect ,将时区调整为Asia/Shanghai , cp /usr/share/zonein ...
- Netty源码 新连接处理
上文我们阐述了Netty的Reactor模型.在Reactor模型的第二阶段,Netty会处理各种io事件.对于客户端的各种请求就是在这个阶段去处理的.本文便来分析一个新的连接是如何被处理的. 代码的 ...
- C# 基础 - Enum 的一些操作
1. int 转换成 enum public enum Suit { Spades, Hearts, Clubs, Diamonds } Suit spades = (Suit)0; Suit hea ...
- UI透明欺诈
判断是否存在的代码: private static boolean c(Activity paramActivity) { List localList = ((ActivityMan ...
- react第三方库
作者:慕课网链接:https://www.zhihu.com/question/59073695/answer/1071631250来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- css行高
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 创建第一个HTML文件
首先右键新建文本文档,然后打开新建的文档,文本内容写上: <html> <head> <title>我的HTML标题</title> </head ...
- [Fundamental of Power Electronics]-PART II-8. 变换器传递函数-8.3 阻抗和传递函数图形的构建
8.3 阻抗和传递函数图形的构建 通常,我们可以通过观察来绘制近似的bode图,这样没有大量混乱的代数和不可避免的有关代数错误.使用这种方法可以对电路运行有较好的了解.在各种频率下哪些元件主导电路的响 ...
- SpringCloudAlibaba—微服务概念及SpringCloudAlibaba介绍
目录 1.1 系统架构演变 1.1.1 单体应用架构 1.1.2垂直应用架构 1.1.3 分布式架构 1.1.4 SOA架构 1.1.5 微服务架构 1.2 微服务架构介绍 1.2.1 微服务架构的常 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...