邪恶八进制信息安全团队技术讨论组's Archiver

sunwear 2005-12-2 22:09

[转载]EXCEL 2000/XP表长度缓冲区溢出分析

信息来源:[url]www.whitecell.org[/url]

---------------------------------
Author:  ilsy
Email:  [email]ilsy@whitecell.org[/email]
Homepage:[url]http://www.whitecell.org[/url]
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 主页:[url]http://www.whitecell.org/[/url]
WSS 论坛:[url]http://www.whitecell.org/forums/[/url]

页: [1]
© 1999-2008 EvilOctal Security Team