• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

恶意代码漏洞分析:CVE-2018-0798

恶意代码漏洞分析 云涯 3年前 (2021-06-28) 1644次浏览

1 CVE-2018-0798概述

CVE-2018-0798和CVE-2017-11882都是典型的栈溢出漏洞。发生在office软件的EQNEDT32.EXE上。这是一个公式解析程序,在解析Matrix record并未检查长度,从而造成栈缓冲区溢出。

具体发生在sub_443F6C函数,没有对输入做限制,导致覆盖了sub_443E34返回地址,从而导致栈溢出漏洞。

2 CVE-2018-0798样本分析

首先在sub_443E34上打好int3断点,然后程序异常调用调试器跳转到sub_443E34上,具体参考CVE-2017-11882这篇文章。

下面以逆向角度看栈与栈溢出以及CVE-2018-0798漏洞。

在第二次调用sub_443F6C函数中,拷贝0x40(64)个字节。还没覆盖时,此时sub_443E34的返回地址是0043A851,sub_443F6C函数的返回地址是00443EC0

把64字节精心构造的数据拷贝后,sub_443E34的返回地址就被修改为044C0B8

0044C0B8是pop ret,返回到44CED2

44CED2是pop ret,返回到00443F6C

将上文ebp(00464000)和edi(0045A3E0)入栈,此时栈顶是0045A3E0,栈底是00464000,都是构造的

在00443F6C内再拷贝0x513字节

shellcode拷贝到00464000

然后ret返回到4013B2,4013B2是leave ret

4013B2返回到0045204A,0045204A是pop eis ,ret

0045204A返回到0044D195,0044D195是call esi,正好把00464018返回给esi,这样就跳转到shellcode

 

 


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:恶意代码漏洞分析:CVE-2018-0798
喜欢 (0)