漏洞分析之 CVE-2017-0802
目录
☛ 漏洞介绍
-
在2017年11月14日,微软发布11月份安全补丁更新,其中更新了潜伏17年之久的Office远程代码执行漏洞(CVE-2017-11882) “噩梦公式一代“,而在2018年1月,又爆出了office 0day漏洞(CVE-2018-0802),该漏洞的技术原理类似17年修补的漏洞,是由于office公式编辑器组件EQNEDT32.EXE,对字体名的长度没有进行长度检验,导致攻击者可以通过构造恶意的字体名,执行任意代码。
-
漏洞影响的版本
- Microsoft Office 2007 Service Pack 3
- Microsoft Office 2010 Service Pack 2
- Microsoft Office 2013 Service Pack 1
- Microsoft Office 2016
☛ 漏洞分析
☛ 1.漏洞分析环境与工具
操作系统:Window 7 专业版 (32 位)
软件:office 2007 sp3
工具:Ollydbg,IDA Pro
☛ 2.复现漏洞
1.搭建漏洞环境(安装 office2007 sp3:完整安装),执行漏洞 poc
2.复现漏洞效果
当运行文档时,会弹出系统计算器,依此为突破口进行分析
☛ 3.分析漏洞
1.定位漏洞函数,及漏洞触发时的操作,由于会弹出计算器,可以在创建进程CreateProcessA
、CreateProcessW
、WinExec
处下断点
- 程序会在
WinExec
API处断下,可以看到传入的参数中有对cmd
的操作,并且是运行计算器的操作
- 根据栈回溯找到一个
0x011017C3
,可认为这个地址所在的函数地址应该就是造成溢出的函数或溢出函数所在的函数
- 重新运行分析,断下之后跟踪分析,发现覆盖堆栈的代码就是这个函数;调式函数内部,可找到覆盖代码操作的是
0x1101E5E
处的指令;在进行拷贝时,发生栈溢出;拷贝内容的最后两个字节x25x00
将覆盖函数的返回地址
2.通过静态分析IDA
- 通过动态调试找到漏洞函数位置:
-
函数内部
0x421E39
的代码实现,在没有检测字符串长度的情况下,直接通过strcpy
覆盖了局部变量,将返回地址覆盖,造成溢出
-
随后,函数继续运行,后面的sub_4115A7函数为CVE-2017-11882修补的函数,在补丁条件下会返回非0,从而导致最终该函数会再次递归调用sub_421774。在第二次调用sub_421774的过程中,函数就会正常返回
-
函数正常返回,就会跳转到上面修改过的返回地址运行
☛ 4.漏洞利用
1.漏洞利用步骤