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
发表评论