0
点赞
收藏
分享

微信扫一扫

漏洞丨cve2017-11882

一、漏洞简介 本次漏洞还是一个office溢出漏洞,漏洞编号cve-2017-11882。该漏洞是office一个组件EQNEDT32.EXE引起的栈溢出,通杀office版本2007-2016。

二、复现环境 系统版本

目标程序

调试工具

辅助工具

win7 sp1 x86

office2007

olldbg

Process-Monitor

三、漏洞复现 在这里呢,我是使用了Ridter师傅的exp进行分析的,网址:https://github.com/Ridter/CVE-2017-11882/ 之后我们安装office2007,然后双击EXP,弹出计算器:

1.png

证明漏洞存在。

四、漏洞分析 首先我们需要找到溢出点,既然他弹出一个计算器,那么我们可以对CreateProcess函数或者WinExec下断点,尝试找到关键地方,用windbg附加office 2007,然后在CreateProcess函数和WinExec函数下断点:

2.png

然后g起来,用word打开exp:

3.png

结果发现并没有断下来,思考许久,猜测计算器不是word弹出来的,我们打开PCHunter查看进程:

4.png

可以看到计算器的父进程是cmd,但是cmd的父进程存在PID,但是在列表中却找不到PID为1404的进程,卡顿许久,猜测或许是cmd父进程隐藏了自己或者启动时间太短,启动完自己结束。想起了一个老软件Process-Monitor,使用Process-Monitor查看进程:

5.png

同样没有,这里我们需要开启Process-Monitor,然后再次用word打开exp:

6.png

现在可以很清晰看到cmd父进程是EQNEDT32.exe,以及他的路径。所以我们需要在EQNEDT32.exe中下断点,而不是word里面下断点。在这里我们需要设置一下注册表,因为EQNEDT32.exe这个程序是被word带起来的,而他又会很快的结束,所以需要设置此程序启动就被附加:

HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS

7.png

这样,我们就完成了EQNEDT32.exe这个程序启动附加。接下来我们双击exp,olldbg成功附加EQNEDT32.exe,首先在对WinExce下断点,Ctrl+g(WinExec),然后在首部下断点:

8.png

go起来,成功停在断点处,说明计算器就是通过WinExce启动的,F8单步走过函数初始化过程,开辟栈空间等步骤,然后我们观察堆栈EBP+4的位置,就是函数返回地址:

9.png

跟进返回地址,可以看到这里调用了WinExec函数:

10.png

我们在call WinExec函数前面一句,以及call这条语句下断点:

11.png

然后关闭word,重新双击exp,然后在OD中运行起来:

12.png

可以看到他停在了call这条语句,并没有执行push eax,在这里我们可以判断出应该是上个函数返回值直接跳到了WinExec上,我们查找堆栈,向高地址查找,可以看到上个函数返回地址:

13.png

在堆栈+40的位置回车跟到上一层函数:

14.png

在此地点上方call函数下断点,然后重新运行,卡在断点处:

15.png

我们F7跟进去单步调试,看看哪里覆盖了返回地址,我们注意F7进去的第一个call:

16.png

首先给他下个断点,预防他是关键函数,然后再F8:

17.png

可以看到这里就是关键函数,刚走过这个函数就断在了WinExec函数上,我们重新调试,让断在刚才下的断点上,F7跟进去调试:

18.png

首先锁定堆栈返回地址,看看什么时候会被淹没,在这里我们已经找到关键地方,一串cmd字符,以及拷贝代码:

19.png

我们执行到返回,可以看到cmd这一串的地址正好是WinExec函数第一个参数: 20.png 21.png

也就是这里是通过淹没返回地址到WinExec上,然后通过修改字符串控制WinExec的参数,启动cmd打开计算器实现。通过启动cmd,打开了计算器,而之后的的AAAA等都是传给计算器参数,是无效的。我们可以在cmd测试一下:

22.png

五、exp简单生成

我们修改一下exp:

23.png

然后用010Editor打exp,找到cmd这串字符,修改为弹出截屏框:

24.png

接下来我们取消断点测试一下: 26.png25.png

弹出了剪切屏,漏洞复现利用成功。! 27.png

举报

相关推荐

0 条评论