EXCEL 2000/XP表长度缓冲区溢出分析 Author: ilsy
Email: ilsy@whitecell.org
Homepage:http://www.whitecell.org
Date: 2005-12-2
分析时间:2005-01-28
经测试发现,EXCEL在处理表长度时存在缓冲区溢出漏洞,可导致执行任意代码。
估计此漏洞为MS04-033所报告的漏洞,未证实。
漏洞原理:
手工建立一个.xls文件,用HEX编辑软件查看Sheet1表前面两个字节是其长度,
修改为FF FF,再用EXCEL打开,导致程序崩溃。经分析发现,这是一个整数溢出
导致的栈溢出。其处理过程如下:
:3003FBD3 8B400C mov eax, dword ptr [eax+0C]
:3003FBD6 FF7008 push [eax+08]
:3003FBD9 8D8560FCFFFF lea eax, dword ptr [ebp+FFFFFC60]
;通过Sheet1表长度计算得到的拷贝长度,因为整形溢出造成这个值错误
:3003FBDF 50 push eax
:3003FBE0 E85953FFFF call 30034F3E
:30034F3E 55 push ebp
:30034F3F 8BEC mov ebp, esp
:30034F41 81EC04020000 sub esp, 00000204 ;分配0x204字节的buffer
:30034F47 53 push ebx
:30034F48 56 push esi
:30034F49 8B7508 mov esi, dword ptr [ebp+08]
:30034F4C 57 push edi
:30034F4D 33FF xor edi, edi
:30034F4F 3BF7 cmp esi, edi
:30034F51 897DFC mov dword ptr [ebp-04], edi
:30034F54 742D je 30034F83
:30034F56 8D85FCFDFFFF lea eax, dword ptr [ebp+FFFFFDFC]
:30034F5C 8945FC mov dword ptr [ebp-04], eax
:30034F5F 0FB706 movzx eax, word ptr [esi]
:30034F62 8D440002 lea eax, dword ptr [eax+eax+02]
:30034F66 50 push eax
:30034F67 8D85FCFDFFFF lea eax, dword ptr [ebp+FFFFFDFC]
:30034F6D 56 push esi
:30034F6E 50 push eax
* Reference To: MSO9.Ordinal:03C0, Ord:03C0h
|
:30034F6F E8C4AEFDFF Call MSO9.memmove
;调用MSO9.memmove拷贝字符串,由于长度错误,而导致覆盖函数返回地址
漏洞利用:
经过分析发现,此漏洞与文件名长度有关系,当按照默认生成的
“新建 Microsoft Excel 工作表.xls”的时候,即经过MULTIBYTETOWIDECHAR转换
后的长度为44字节时,偏移0x344处的4字节会覆盖返回地址,而偏移0x33c需要是
一个可以读的地址局部变量。
在文件中建立一个内容为“AAAA....”,长度很长的注释,用于存放shellcode。
再打开文件发现从JMP ESP返回后,EBX+0xa30会指向shellcode,所以用add ebx,
a30h然后jmp ebx来跳转的shellcode。
WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页:http://www.whitecell.org/
WSS 论坛:http://www.whitecell.org/forums/