CVE-2013-0077:Microsoft DirectShow quartz.dll m2p文件堆溢出漏洞调试分析

环境安装

虚拟机:Virtualbox
系统版本:Windows xp sp3 提取码:8m2n
调试工具:windbg 提取码:dbai *
漏洞软件与poc:CVE-2013-0077 提取码: r4kz

*因为微软已经停止了符号文件对 Windows XP 系统的支持,所以要进行手动安装symbol,symbol文件已经整合到压缩包中,下面是symbol手动安装步骤

1先添加环境变量(右键我的电脑→属性→高级→环境变量)变量名_NT_SYMBOL_PATH 变量值 SRV* c:\mysymbol * http://msdl.microsoft.com/download/symbols

2安装压缩包中的的windbg软件(自行选择32,64版本)后安装
在这里插入图片描述
*若安装失败可能是因为非原版xp系统 可选择安装我上面链接中或自行寻找原版xp sp3

3启动winsbg后输入!sym noisy与.reload
在这里插入图片描述
根据蓝色框显示,会先到上面建立环境变量的文件夹中寻找.dll文件,我们先到第二步的安装文件中找到ntdll.pdb(默认安装位置C:\WINDOWS\Symbols)

在这里插入图片描述
放到蓝框中相同路径处
在这里插入图片描述
再输入.reload就能成功加载symbol文件
在这里插入图片描述
此调试过程中需用此方法手动添加几个symbol文件,可能遇到添加到其他文件夹中等情况,请根据!sym noisy详细信息中的反馈自行调整

调试流程

连接程序

安装好QQplayer后使用windbg附加程序在这里插入图片描述

开启页堆

利用页堆查看溢出点
输入!gflag +hpa开启页堆
在这里插入图片描述
遇到symbol问题请查看上面解决办法

查看溢出

输入g使运行程序
在这里插入图片描述
把poc.m2p拖入QQplayer
结果如下
在这里插入图片描述
记录地址 0x7d0707e0
此地址可能不同

重新启动附加QQplayer
输入bu 7d0707e0 设下断点
(利用bl查看断点列表)
在这里插入图片描述
输入g运行程序,把poc.m2p拖入
程序再断点处停下
输入dd edi 与dd edi 查看edi与esi
在这里插入图片描述
记录此时edi=0x27c54f64
此地址可能不同
输入bd0 禁用前面断点
在这里插入图片描述
输入g让程序继续执行 停下后
输入dd edi查看当前edi
在这里插入图片描述
此时edi= 0x27c55000
此地址可能不同

漏洞分析

当前堆块允许复制大小为0x27c55000-0x27c54f64=0x9C,查看溢出函数quartz!ParseSequenceHeader 此函数为图像头SequenceHeader的起始标记,视频序列头SequenceHeader数据共有195字节=0xC3。0xC3>0x9C造成溢出
此poc中漏洞的利用是利用覆盖虚表指针来控制程序执行流程

扫描二维码关注公众号,回复: 10525639 查看本文章

漏洞修复

windows7以后的quartz.dll中已经将允许复制的大小进行了限制而防止堆溢出

参考资料 《漏洞战争》 林桠泉著

发布了21 篇原创文章 · 获赞 3 · 访问量 3565

猜你喜欢

转载自blog.csdn.net/qq_38547744/article/details/99090022
今日推荐