菜鸟漏洞学习笔记之一---CVE-2017-11882写在前面的话:由于作者对于漏洞这一块非常感兴趣,但无奈以前确实没有接触过,所以打算写一份关于漏洞学习的笔记,想将自己的漏洞学习过程全程记录下来。由于作者水平有限,所以文章中会出现各种错误以及没有提到(因为不理解,所以不知道怎么说)的地方。希望大家提出宝贵的学习意见,谢谢!本文主要分为三个部分:一:为什么要研究这个漏洞。二:整个漏洞的学习过程。三:参考资料以及致谢。
一:为什么要研究这个漏洞1:简单,这个漏洞没有各种复杂的保护机制,适合新手上手。2:高效,适合很多的Windows Office版本3:我就想看看啥叫漏洞
二:整个漏洞的学习过程作者在想学习漏洞的时候,有哥们说可以学习一下CVE-2017-11882,简单易学易上手,网上的教程也很多,最关键的是有哥们讲解。所以作者就开始了这个漏洞的学习。1:相关资源安装office 2010以及拿到这个漏洞的exploit,并运行文件后产生下面这个结果。2:参考文献的作用开始调试这个相关的文件(因为这个文件可以触发漏洞,所以学习这个文件触发漏洞的机制是我们学习这个漏洞的基础)在网络上面搜索参考资料,其中《隐藏17年的Office远程代码执行漏洞POC样本分析(CVE-2017-11882)》这篇文章中写到本来在调试文件的时候,放入OD中的我们可以单步跟踪程序的执行的流程,但是在这里缺不能了,因为EQNEDT32.EXE是以单独的进程形式存在的。我们以什么方法进行才能够调试一个进程创建的另一个进程呢?在《如何在程序启动的时候将调试器附加上去 》这篇文件上写到所以文章通过这样的方式进行附加进程的操作。3:WinDbg的正确打开方式按照文章的方式进修修改,这里需要说明的是这里用于调试的工具是WinDbg,而且在注册表的“数据数值”里面填写的是调试器的全路径+exe文件,而不是exe文件!
4:具体思路:现在可以开始使用WinDbg进行调试了,这里有一个疑问提给大家--我们辛辛苦苦的打开WinDbg调试,到底要干啥?现在开始理一下思路:所以我们就想到在创建进程的函数上面打上断点,试一下看看怎么样。注:打断点的函数bp kernel32!WinExec、bp kernel32!CreateProcessW
程序在WinExec这个函数上面被断下来了。再看一下相关栈的调用情况附加信息:当程序在WinExec断下来以后,断点进入这个函数里面,而这里的0x430C18就是这个函数运行完毕以后返回到上一层的地址。而下面的0x4218e4又是什么意思呢?就是调用WinExec的函数了。这里怎么理解呢?所以我们从调用WinExec函数的上一层去找那个被溢出的函数就可以了。而这个函数的返回地址就是0x0x4218e4.进去看看这个也就是我们的函数fun_1了,进去找fun_B在哪里?代码只有这些,可以硬看。好吧,我菜,所以我偷偷的按了一下F5。很容易看出来这个函数可能有问题,进函数,此时的栈情况发现了一个写代码很经典的错误,就是字符串长度没有限定,所以出现了溢出错误。到这里为止,就算是找到溢出的地方了。而0x430C12就是call WinExec地址了。我们可以弹出来一个记事本试试。将objdata里面的内容全部复制下来,以二进制的形式复制出来。其中在这个地方的二进制字节码修改成保存完毕后,将这一段代码重新复制回源文件保存后再打开这个.rtf文档试试。弹出了一个notepad.exe的程序。
三:参考资料以及致谢参考资料:[1]:FreeBuf 隐藏17年的Office远程代码执行漏洞POC样本分析(CVE-2017-11882)[2]:52PoJie [调试逆向] 如何在程序启动的时候将调试器附加上去致谢感谢XX辉对于漏洞的详细讲解、感谢X越、XX祥的交流与讨论。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
这是.rtf