CVE-2011-0104 Microsoft Excel 栈溢出分析与复现

漏洞战争学习笔记

0x00 分析

使用Abysssec组织的exploit做为调试样本,首先打开excel –> attach execel.exe –> 按f9运行 –> 打开exploit文件。程序断下在0x300ce361 处:
这里写图片描述
向上栈回溯代码:
看到产生错误的代码的调用函数是sub_300ce252
这里写图片描述
在此处下断点,重新运行程序,看到此时的栈顶是0x0013aa90,也就是该函数的返回地址。
在0x0013aa90处下内存写断点,以便跟踪到覆盖函数返回地址的命令:
这里写图片描述
在函数返回值处下断点,按f9,断下,看到0x300ce3c8处循环复制数据到栈上,此时的edi地址是0x0013aa9b,ebp的地址是0x0013aa3b,栈空间为0x60。推断是栈空间溢出导致数据覆盖了栈数据照成异常0x300ce361处eax的数据异常造成异常退出。现在我们的目标是先弄清楚函数间的关系,然后调试exploit使之正常运行。
这里写图片描述
单步执行代码至return处,此时的esp值为0x001379ec。
这里写图片描述
通过回溯代码可以看到这个函数为sub_300ce380
这里写图片描述
可以看到这个函数sub_300ce380被0x00306df0dc处调用
这里写图片描述
重新加载excel.exe,到sub_300ce252函数f8单步执行,看看是哪个函数导致了覆盖函数返回值,顺便理清sub_300ce380和sub_300ce252的关系:
这里写图片描述
可以看到执行sub_306deefe之前,函数返回地址0x0013aa90的返回值是正常的,执行之后:


返回地址被修改为shellcode了。说明是sub_306deefe函数出现问题,于是重新加载execel.exe 进入该函数单步执行,在0x003060dc处发现了函数sub_300ce380。
说明是 sub_300ce252 调用了sub_306DEEFE然后调用了sub_300CE380。
分析完大致可以了解了导致溢出的过程。
接下来就是调整shellcode使shellcode正确执行的过程。

0x01 复现

首先定位程序出错的0x300ce361 处,发现eax的值为shellcode数据,且不可写入,所以引发异常。向上回溯代码,发现ebp+2c处的值赋给了eax定位到0x0013aab8,获取了这段数据的ascii值。
这里写图片描述
同时定位函数返回值为0x3042232,2bb0
这里写图片描述
接下来就可以在shellcode中找这段数据:
这里写图片描述
首先抬高shellcode,填充90,并在发生异常的地方填充一个可写的地址,再到od中找到一个call esp函数填充再函数返回值,函数返回的时候执行shellcode。
这里写图片描述
保存后打开exploit发现成功弹计算器:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值