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

恶意代码漏洞分析:CVE-2017-11882

恶意代码漏洞分析 云涯 4年前 (2020-06-08) 2236次浏览

栈溢出漏洞概述

栈溢出(stack-based buffer overflows)原因一方面因为程序员的疏忽,使用了 strcpy、sprintf 等不安全的函数,增加了栈溢出漏洞的可能。另一方面,因为栈上保存了函数的返回地址等信息,攻击者任意覆盖栈上的返回地址,改变程序执行流程,加载恶意shellcode。这种攻击方法就是栈溢出攻击(stack smashing attacks)。

栈是由内存地址大向内存地址小的方向增长。

下面以逆向角度看栈与栈溢出。

进入eqnedt32.41160F函数查看栈变化

images

进入函数入口之后,发现内存地址0019FABC保存着0041134E这个值,这个值又是上图中call函数的下一个地址。

images

将ebp入栈,此时内存地址0019FAB8存储着0019FAFC这个值,这个值是上一个函数的栈的ebp。

images

images

继续执行,将esp所指地址赋值为新的ebp,供0041160F这个函数所使用的栈的栈底(ebp)

images

继续执行,分配栈空间大小,esp从刚刚的0019FAB8,分配了88h的栈空间

images

images

执行返回函数ret之后,跳转到call函数的下一条。此时的ebp(栈底)就是0019FAFC

images

images

下图是逆向图示的图形化。

images

当发生栈溢出时,从比如0019FA30处向栈写入大于90h的数据,那么就会将地址0019FAB8与0019FABC进行覆盖,0019FBC返回地址就会被写成新的返回地址,跳转到shellcode处(假设是00412565)。

images

CVE-2017-11882概述

CVE-2017-11882是典型的栈溢出漏洞。发生在office软件的EQNEDT32.EXE上。这是一个公式解析程序,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出。具体发生在0041160F函数的strcpy函数处,这是一个典型的不安全函数,拷贝字节时极易发生溢出。

images

images

CVE-2017-11882样本分析

为了能即时调试EQNEDT32.EXE程序,将0041160F函数入口的55更改成CC(int3断点),并将x64dbg设置成即时调试器

images

images

使用office打开就会弹出异常,点击取消就会启动x64dbg的即时调试,程序就会停止到int3断点(0041160F入口)

images

images

此时再将CC更改回55。溢出漏洞具体发生在00411658的rep movsd指令上,会覆盖ebp以及栈返回地址,跳转到shellcode地址(大概是第二次调用0041160F函数才会触发漏洞)。将程序断点到00411658函数,然后在数据窗口观察ebp(0019EBF8)与返回地址(004115D8)。

images

执行00411658地址的rep movsd函数。原来的ebp与返回地址已经被覆盖。当执行完0041160F这个函数返回的地址不再是004115D8,而是0040B74E。

images

images

然后0040B74E的ret指令就会转到0019ED38

images

接下来就是跳转到shellcode。然后执行恶意功能。

images

恶意功能大概是异或解密,远程下载有效荷载并执行。


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