首页
社区
课程
招聘
[原创]CVE-2011- 0104 Microsoft Excel ToolBardef Record 栈溢出漏洞在Excel 2003下利用分析
发表于: 2017-5-28 19:24 7490

[原创]CVE-2011- 0104 Microsoft Excel ToolBardef Record 栈溢出漏洞在Excel 2003下利用分析

2017-5-28 19:24
7490

最近在研究CVE-2011-0104栈溢出漏洞,学习了《漏洞战争》中关于该漏洞的分析,书中介绍了Excel 2003 下利用已公布的PoC代码触发异常、下断点定位导致溢出的复制操作位置以及基于污点追踪的漏洞分析方法,但是对如何在Excel 2003下如何利用该漏洞没有做更加深入的分析,同时abysssec组织提供的漏洞样本也是基于Excel 2007 (xp) SP2的。笔者在学习该篇文章的基础上,动手进行了调试,通过定位字符串复制操作、分析函数调用栈、修改样本数据、修复异常,成功完成了Excel2003下该漏洞的利用,弹出了计算器。现将该调试分析过程发布出来,供学习交流。

一、分析环境

 

推荐使用环境

备注

操作系统

Windows xp

简体中文版

虚拟机

VMware Workstation

版本号:12.1.1 build

调试器

Immunity Debugger

版本号:V1.73

调试器

WinDbg

版本号:6.12.0002.633

漏洞软件

MicrosoftOffice Excel

版本号:2003 11.5612.6568


二、分析调试过程

运行excel.exe,然后用WinDbg附加excel2003进程,在命令输入框中按g,使excel2003运行出现打开后的界面,打开exploit.xlb样本文件,打开后触发异常:

(e48.e4c): Access violation - code c0000005   (first chance)

First chance   exceptions are reported before any exception handling.

This exception   may be expected and handled.

eax=51453844   ebx=00000002 ecx=00000006 edx=3161feb0 esi=00000000 edi=00000400

eip=300ce361   esp=0013aa24 ebp=0013aa8c   iopl=0         nv up ei pl nz na pe nc

cs=001b  ss=0023    ds=0023  es=0023  fs=003b    gs=0000             efl=00010206

*** ERROR:   Symbol file could not be found.    Defaulted to export symbols for C:\Program Files\Microsoft   Office\OFFICE11\EXCEL.EXE -

EXCEL!Ordinal41+0xce361:

300ce361   8908            mov     dword ptr [eax],ecx  ds:0023:51453844=????????

0:000> kb

ChildEBP RetAddr  Args to Child             

WARNING: Stack   unwind information not available. Following frames may be wrong.

0013aa8c 30424232 42414242 41385058 494a7542   EXCEL!Ordinal41+0xce361

0013aa90   42414242 41385058 494a7542   584b4c4b   EXCEL!Ordinal41+0x424232

0013aa94   41385058 494a7542   584b4c4b   30435451 0x42414242

0013aa98 494a7542 584b4c4b 30435451 50453043 0x41385058

运行excel.exe,然后用Immunity Debugger附加excel2003进程,按F9,使excel2003运行出现打开后的界面,打开exploit.xlb样本文件,打开后触发异常:


通过向上进行代码回溯分析,崩溃地址位于函数sub_300CE252


然后,在0x300CE252下断点,并对栈顶下内存写入断点(此处的栈顶就是调用sub_300CE252函数时将返回地址压栈时的ESP值,即0x0013AA90):

      

F9执行到0x300CE3C8,此处进行循环复制数据到栈上,导致溢出:

此时中断,查看寄存器值发现EBP=0013AA3BEDI=0013AA9B,复制了0x60个字节:

根据《漏洞战争》P53P54的分析,REP MOVS 操作的目的地址由ebp提供,由此得知,当复制0x60个字节时edi的值由于递增覆盖到了栈顶(0x0013AA90,此处在漏洞利用中应为“跳板地址”)。

单步执行到该段程序的末尾处Retn 0c处时,此时栈如图:

此时ESP值为0x001379EC

通过向上回溯代码,发现该段函数开始于0x300CE380,因此定义该函数为sub_300CE380:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/05/31
最新回复 (9)
雪    币: 2575
活跃值: (502)
能力值: ( LV6,RANK:85 )
在线值:
发帖
回帖
粉丝
2
赞!收藏学习
2017-5-28 23:01
0
雪    币: 174
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
赞一个,mark
2017-5-31 11:20
0
雪    币: 1200
活跃值: (1143)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4
感谢打赏
2017-6-6 12:54
0
雪    币: 38
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主用的ImmunityDebugger是什么版本的?1.73?我在用1.85版的时候遇到了  在  300e05ad  push  ebp后对堆栈下内存写入断点,无效的问题。但是在OD下就行=  =
2017-12-13 14:43
0
雪    币: 1200
活跃值: (1143)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
具体版本记不清了,个人觉得OD更好用
2018-1-12 23:04
0
雪    币: 1200
活跃值: (1143)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
7
没事干,拿来重新调试,当调用sub_300CE380,运行到0x300CE3C8时,最上层的调用函数sub_300CE252还没有返回,可以控制使shellcode复制到栈中返回地址后面0x30字节地址处(返回地址处覆写为call esp地址,sub_300CE252的返回操作为retn,2c)。这一点对于理解本文很关键。
2019-3-10 21:35
0
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
请问下   EXCEL2003下的跳板指令CALL ESP的地址0x300F2903    这个地址是怎么找到的?
2020-3-16 23:08
0
雪    币: 47
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
2020-3-16 23:37
0
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
感谢
2020-3-17 04:21
0
游客
登录 | 注册 方可回帖
返回