CVE-2012-0158 漏洞分析报告
阅读原文时间:2023年07月12日阅读:4

Office 2003 sp3(CVE-2012-0158)漏洞分析报告

软件名称Office 2003 sp3

软件版本:2.0

漏洞模块:MSCOMCTL.ocx

模块版本:2.0.0.0

编译日期:2003

操作系统:Windows XP/2003/7/8.1/10

漏洞编号:CVE-2012-0158

危害等级:超危 or 高危 or 中危 or 低危

漏洞类型:栈溢出

威胁类型:本地

  • 软件简介

Microsoft Office 2003 是微软公司针对Windows操作系统所推出的办公室套装软件,包含WORD、EXCEL、PowerPoint等三大组件,用处广泛,多以普及办公室、行政等。与办公室应用程序一样,它包括联合的服务器和基于互联网的服务。

  • 漏洞成因

2.1漏洞介绍

CVE-2012-0158漏洞是一个栈溢出漏洞,该漏洞是微软Office办公软件中的MSCOMCTL.oce中MSCOMCTL.ListView控件时检查错误造成的,攻击者可以通过精心构造的数据控制程序EIP实现任意代码执行

CVE-2012-0158漏洞的微软编号是ms02-027

2.2复现漏洞

准备:获取造成漏洞的poc,安装 office 2003 sp3

使用winworld直接执行poc效果:

2.3调试漏洞

设置OD不忽略异常,不跳过异常,附加WINWORD程序

2.3.1定位漏洞触发点

分析溢出点附近堆栈,溢出点下面的堆栈一般是刚刚调用的函数的上一层函数堆栈,溢出后

可能已经破坏,溢出点上面的堆栈一般是刚刚执行的函数堆栈,可以发现有一个地址

275C8A0A,可以看出这个地址是 MSCOMCTL 模块中的地址,由此判断刚刚执行的函数中执

行了 MSCOMCTL 模块中的代码

多次调试发现无随机基址

在调用275C8A0A函数的外部函数下断点

重新调试,观察其返回地址在何处被改变

可以看出返回地址在275C8A05地址,调用MSCOMCTL.275C876D函数后被改变

接下来分析该函数,找到MSCOMCTL.OCX文件,使用IDA找到该函数静态分析一下

发现该函数中有拷贝函数

使用OD进行调试发现是拷贝出了问题,栈破坏将外层函数返回地址覆盖

调用它的函数,发现限定的字节数v7和dwBytes都是局部变量

且同为8282

使用010查看文件发现,两个字节数存储在文件中

改变数字,再次调试

EDI是参数,也就是第一个数是传进来的数字dzbyte,第二个数是限定的字节数v7

也就是可以随意的更改缓冲区的大小,填充时,局部变量存不下,破坏了堆栈

参考:

  • 利用过程

漏洞利用的步骤:

1. 分析和设计漏洞 shellcode 的结构

2. 在运行的程序中寻找跳板指令地址

jmp esp

使用ImmunityDebugger+mona.py

将mona.py放入ImmunityDebugger的PyCommands目录中

在ImmunityDebugger中使用 !mona modules命令 遍历模块

找到 Rebase ,SafeSEH, ASLR,NXCompat 为 False ,而 OS DLL 为 True 的系统模块。(也就是,无保护,系统会调用的模块)

msvbvm60.dll

使用!mona find -s "\xff\xe4" -m msvbvm60.dll命令,在找到的模块中,查找jmp esp指令

找到一个可读可执行的jmp esp指令,0x729a0535

以小端方式放入文件缓冲区覆盖返回地址的位置

  • PoC

jmp esp指令地址有了,接下来是写 shellcode

shellcode模板:

弹出一个messagebox,helloworld

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器