CVE-2013-2551分析

调试前

分析用的PoC来自于泉哥的漏洞战争一书。PoC见文章最后。
跟着PoC走一遍,crashme函数中基本都是在对v:stroke在进行处理,包括对其dashstyle属性的操作,Google一下v:stroke msdn,该部分属于VML(矢量标记语言),类似于IE中的画笔,绘制图形之类的。

环境

win7 sp1 32
IE8 8.0.7601.17514IS
在已经装了IE11的机器上卸载更新达到IE8后,表示无法触发Crash(建议使用一个纯IE测试)

分析

其实这个PoC已经能够很明显控制到EIP了,

1
2
3
4
5
6
7
8
9
0:022> g
(b14.d40): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0185cda8 ebx=04e4a654 ecx=01852988 edx=4b5f5f4b esi=0185ce28 edi=04e4a6dc
eip=69104ea7 esp=04e4a52c ebp=04e4a53c iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
jscript!CScriptRuntime::GetVarVal+0x6c:
69104ea7 8b5270 mov edx,dword ptr [edx+70h] ds:0023:4b5f5fbb=????????

发现是在访问edx+70h时出现错误,而edx+70h = 4b5f5fbb, edx为4b5f5f4b,跟到PoC发现这正是PoC中所赋值的内容:
1
shape.dashstyle.array.item(0x2E+0x16+i) = 0x4b5f5f4b;

说明此时的edx可控,然后可以发现后面将会call edx
1
2
3
4
5
6
7
69104e9f 8b4808          mov     ecx,dword ptr [eax+8]
69104ea2 8b4508 mov eax,dword ptr [ebp+8]
69104ea5 8b11 mov edx,dword ptr [ecx]
69104ea7 8b5270 mov edx,dword ptr [edx+70h] ds:0023:4b5f5fbb=????????
69104eaa 50 push eax
69104eab 53 push ebx
69104eac ffd2 call edx

因此我们在指定的一个内存区域覆盖我们的shellcode,然后将该地址-70h赋值给shape.dashstyle.array.item,在执行后面的call之后就能够达到任意代码执行。

VUzzer HeapAlloc 由HeapAlloc看内存堆块的分配过程
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×