CVE-2012-0003 Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞

0x00 分析

使用windbg目录下的gflag.exe 开启堆页,以便后续的调试使用:

C:\Program Files\Debugging Tools for Windows (x86)> gflags.exe -i IExplore.exe +hpa
Current Registry Settings for IExplore.exe executable are: 02000000
    hpa - Enable page heap

使用od attach ie,打开poc.html
选择加载activeX控件。程序断点断在 mov al, byte ptr [esi]处
这里写图片描述
查看esi中的数据,可以发现esi中的数据为0,由于设置了页堆,取值时会触发异常。
这里写图片描述
按alt + e 查看加载的dll文件找到断点处所在的dll
这里写图片描述
使用ida加载winmm.dll
定位到0x76b2d224所在的函数,按f5查看c源代码:
这里写图片描述
通过阅读源代码了解到该漏洞函数的变量传递途径,对变量下条件日志断点,在od中动态运行研究,第一个断点是函数入口点地址。
这里写图片描述
按f9运行直到断下
这里写图片描述
可以发现v2和wparam是不变的参数,而v9是逐渐递增的计数器,v11和v13是相等的,最后,v21取了v13的最后一个字节的值9f
由MIDI的格式可知,9f代表的是Note On打开音符事件,由此可知v13,v11应该是包含了参数的音轨事件。因此在取9f的v11处的地址0x76b2d0b5处下条件断点,输入 [ebx+eax] == “0x007db29f”,即在取到音轨事件时断下。
单步执行:

76B2D0B2 >|.  8B45 08       |mov     eax, dword ptr [ebp+8]
76B2D0B5 >|.  8B0C03        |mov     ecx, dword ptr [ebx+eax]
76B2D0B8  |.  83C3 04       |add     ebx, 4
76B2D0BB  |.  8BC1          |mov     eax, ecx
76B2D0BD  |.  895E 24       |mov     dword ptr [esi+24], ebx
76B2D0C0  |.  C1E8 18       |shr     eax, 18
76B2D0C3  |.  81E1 FFFFFF00 |and     ecx, 0FFFFFF
76B2D0C9  |.  33DB          |xor     ebx, ebx
76B2D0CB  |.  395D F4       |cmp     dword ptr [ebp-C], ebx
76B2D0CE  |.  8845 0B       |mov     byte ptr [ebp+B], al
76B2D0D1 >|.  894D F8       |mov     dword ptr [ebp-8], ecx
76B2D0D4  |.  74 2A         |je      short 76B2D100
76B2D0D6  |.  A8 40         |test    al, 40
76B2D0D8  |.  74 26         |je      short 76B2D100
76B2D0DA  |.  8B45 F0       |mov     eax, dword ptr [ebp-10]
76B2D0DD  |.  53            |push    ebx
76B2D0DE  |.  56            |push    esi
76B2D0DF  |.  8946 1C       |mov     dword ptr [esi+1C], eax
76B2D0E2  |.  FF77 4C       |push    dword ptr [edi+4C]
76B2D0E5  |.  0FB747 4A     |movzx   eax, word ptr [edi+4A]
76B2D0E9  |.  68 CA030000   |push    3CA
76B2D0EE  |.  FF77 04       |push    dword ptr [edi+4]
76B2D0F1  |.  50            |push    eax
76B2D0F2  |.  FF77 44       |push    dword ptr [edi+44]
76B2D0F5  |.  E8 9F83FEFF   |call    DriverCallback
76B2D0FA  |.  8A45 0B       |mov     al, byte ptr [ebp+B]
76B2D0FD  |.  8B4D F8       |m
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值