Loading
1

暴风影音AviIndexChunk字段堆溢出漏洞分析实战

eip=74b02016 esp=1488f2c8 ebp=1488f2d0 iopl=0         nv up ei ng nz ac po cy
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010293
MSVCR100!memcpy+0x196:
74b02016 8807            mov     byte ptr [edi],al          ds:002b:22297000=??
通过Windbg的Disassembly窗口查看附近指令:
74b02014 8a06            mov     al,byte ptr [esi]
74b02016 8807            mov     byte ptr [edi],al          ds:002b:22297000=??
查看mov指令源和目的操作数:
0:009> r al
al=0
0:009>r edi
edi=22297000
0:009> dd edi
22297000  ???????? ???????? ???????? ????????
由上述信息得知,edi所代表的目的地址219bd000是不可访问的。因此初步判断,造成异常的原因是,向一个不可访问的内存地址写入了单字节数据。
在windbg中继续执行:
0:009> g
ModLoad: 6a4f0000 6a519000   C:\PROGRA~2\Baofeng\STORMP~1\Core\Codecs\ffsource.ax
ModLoad: 6a450000 6a4e3000   C:\PROGRA~2\Baofeng\STORMP~1\Core\Codecs\swscale.dll
StormPlayer---- CVideoContainer::OnSize---1 – 80660426
(e80.e30): C++ EH exception - code e06d7363 (first chance)
(e80.e30): C++ EH exception - code e06d7363 (first chance)
StormPlayer---- CVideoContainer::OnSize---2- 80660441
StormPlayer---- CVideoContainer::OnSize---3- 80660441
ModLoad: 642e0000 642f1000   C:\Windows\SysWOW64\cryptdll.dll
为何在上述异常出现后,程序仍能正常运行呢?先把这个问题留到后面第0×05小节回答。
在得知漏洞现场的基本情况后,会有以下几个疑惑:
a. 产生该漏洞的原因是什么?
b. 漏洞能否利用?
c. 异常之后为何能够继续执行?
0×02 漏洞分析过程
该如何下手分析这个漏洞呢?或许这也是很多童鞋要问的第一个问题。
根据漏洞现场附近的指令:
74b02011 c9              leave
74b02012 c3              ret
74b02013 90              nop
74b02014 8a06            mov     al,byte ptr [esi]
74b02016 8807            mov     byte ptr [edi],al          ds:002b:22297000=?? 74b02018 8a4601          mov     al,byte ptr [esi+1]
74b0201b 884701          mov     byte ptr [edi+1],al
74b0201e 8b4508          mov     eax,dword ptr [ebp+8]
74b02021 5e              pop     esi
74b02022 5f              pop     edi
74b02023 c9              leave
74b02024 c3              ret
可以看出,漏洞现场的mov指令涉及到数据al和内存地址edi,因此首先需要搞清这两者的来源,方能探知漏洞的成因。
先从漏洞现场的栈回溯信息看一下此时的程序逻辑:
0:034> k
ChildEBP RetAddr
1613f2d0 67b87339 MSVCR100!memcpy+0x196 1613f310 67b87037 AviSplitter!DllRegisterServer+0x679
1613f328 67b83203 AviSplitter!DllRegisterServer+0x377
1613f38c 67b8333f AviSplitter+0x3203
1613f3f0 67b835ce AviSplitter+0x333f
1613f414 67b837d1 AviSplitter+0x35ce
1613f438 67b85444 AviSplitter+0x37d1
由上可知,漏洞现场发生在memcpy拷贝函数中。
结合漏洞分析经验,这里猜测,很可能是在拷贝poc.avi样本中的内容时出现的问题(当然后续还需要验证猜测是否正确)。因此在具体分析之前,需要提前了解一些poc.avi样本文件的基本信息:
大小:0x270h
开头:52494646 RIFF魔术字
1. AL来自于哪里
从漏洞现场之前的指令序列:
74b02014 8a06            mov     al,byte ptr [esi]
可以看出,al来自于esi寄存器所代表的内存位置,查看esi地址的内存信息:
0:032> !address esi
Usage:                  PageHeap --
Base Address:           231f6000
End Address:            23207000

分页阅读: 1 2 3 4 5 6 7 8 9 10
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。