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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值