漏洞丨cve2017-11882

时间:2022-12-21 07:16:14

作者:黑蛋

一、漏洞简介 本次漏洞还是一个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,弹出计算器:

漏洞丨cve2017-11882

证明漏洞存在。

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

我们执行到返回,可以看到cmd这一串的地址正好是WinExec函数第一个参数: 漏洞丨cve2017-11882漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

五、exp简单生成

我们修改一下exp:

漏洞丨cve2017-11882

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

漏洞丨cve2017-11882

接下来我们取消断点测试一下: 漏洞丨cve2017-11882漏洞丨cve2017-11882

弹出了剪切屏,漏洞复现利用成功。! 漏洞丨cve2017-11882