Equation漏洞混淆利用分析总结(下)

样本三

如下所示在该样本中,使用了Ole10Native的流,因此没有equative head,默认读取红框中的4位长度。之后的metf head为01.

可以看到metf head的长度为01时,直接进入到if判断中(该if中的函数实际是一个异常处理函数,但是当传入的参数为45,145时不影响之后的漏洞利用),之后读取0A一位,因此当metf head的version为01时,实际的metf head的长度只有两位。

往后读取01,进入11882流程,导致直接返回,进入case流程。

进入case中的0798流程,读取08,进入之后的fun_Matrixdispatch,此时进入fun_Matrixdispatch中的11882/0802流程。

样本四

如下所示可以看到样本使用的是常用的equationative流,长度为1c的字节,之后紧跟metf头,但是咋看之下却并不能确定其具体的漏洞cve,从metf之后的88字节来看,应该是对应的11882/0802漏洞

从vt上报的漏洞类型来看,大多数厂商的识别是0802系列,由于从上文所知,metf之后的构造拥有多种方式,因此我们就来看看这个漏洞是否真是0802.

可以看到fun_ParseMTEFData函数中,metf头检验之后,向后读取一字节,此时获取的为0d,作为参数进入到正常的11882/0802流程,0d>09,因此函数直接跳过再次向下读取。

一直跳过0D 0A,直到蓝色框中的01字节。

01被正常11882/0802返回,直接dispatch到case1中。

进入case1流程中的0798,向下再读取一字节01。 

0798中由01  dispatch进入到case0流程。

如上文所示,在样本二中提到进入该函数中实际上是有方法进入到对应的equation流程中,但是在当时的漏洞利用样本中,该函数直接进入到if流程中,当时的分析中提到要进入else中需要相关的特殊构造,即a4等于1,else中实际是一个while循环,依次读取并传入到0798的dispatch中。

可以看到while循环中之后会读取02的tag,在该tag中会以此处理之后的3个字节,样本中一共构造了四对02的tag用于混淆,之后处理35tag,35tag->5,即tag 5,而tag5实际上就是0798的漏洞tag,因此基本可以证明该样本使用的漏洞是0798.

如下所示,读取对应的35位tag

导致dispatch到case4中,即对应的0798漏洞流程中。

0798函数中,以此向后读取5字节的内容,其中第四,第五字节将导致溢出,即下图中的20,80,之后分别以这两字节内容为长度进行栈上数据的拷贝,一共调用两次,最终两段栈上数据连成一片,从而造成溢出。

第一次拷贝,参数为20,及0012f3fc,0012f3fc为目标栈上的地址。

第二次,拷贝,参数一为80,参数二为0012f404。可以看到第二次拷贝的地址在第一次拷贝的高地址出。

拷贝前的堆栈。

拷贝之后的堆栈,可以看到此时返回地址已经被覆盖,但是这个覆盖的数据是不是很奇怪,50505050这个地址并没有意义,难道这只是测试样本?但是从沙箱的结果来看样本是执行成功的。

仔细再看一下漏洞函数可以发现,实际上在溢出之后,函数返回之前,还有相当一部分的操作,即之后的sub_4428F0函数,及之后的还有一次0798的操作,也就是还能向后读取数据,结合对应的样本数据,可以发现确实还能向后拷贝,sub_4428F0函数之后将其结果作为参数,返回给0798漏洞流程,同时也能看到第一次溢出的拷贝的数据v6,是作为第四个参数传入到该函数中的,我们的看看这个函数具体做了啥。

首先可以看到a2,a3这两个参数来自于sub_43b349函数,值分别为word_45B246和word_45B244

而word_45B246和word_45B244的相关引用函数如下所示,其中Headcheck引起了我们的注意

可以看到这两个位置的数据是在metf头检验中进行的设置,即函数sub_43B1D0。

可以看到sub_43B1D0中设置a2,a3的值是依赖于metf头之后的一位的值,且在处理的过程中有ReadByte的操作,这就意味这实际上可以通过该函数来实现往metf头之后插入混淆数据的操作。

但是实际上仔细看代码就可以知道,上面a2,a3是取的栈上的地址,也就是说这个值实际上在溢出之后是可控的。

再次调试可以看到a2,a3的地址分别为0012f420,0012f41c。

溢出之后可以看到此时a2,a3的值被修改。

如下所示,该函数的调用栈,需要注意的是2,3,4参数,其中第四个参数为溢出数据的第一段内容,2,3参数的低四字节(溢出时被修改为5800,06eb)需要注意,下文中会有相关解释。

进入函数,可以看到首先通过sub_435B4A返回了一段内存v5,之后通过传入的参数对该段内存进行初始化,其中红框中的三处赋值初始化是关键,第一二次赋值分别将二三参数的低四位分别去处并v5偏移40和42处(06rb5800),之后通过函数memory将a4的0x14长度的数据拷贝到v5偏移50处,a4就是之前0798溢出时的第一次拷贝shellcode

此时反编译一下00281c3c这段内存,可以看到之前第一次拷贝的06eb5800的对应反编译源码为pop eax,jmp 00281c6e

而00281c6e正好就是之前v5+50处拷贝的溢出shellcode的第一段,而最终00281c3c这段内存会作为参数返回。

00281c3c的作为返回值返回,并作为参数1传入到之后的0798 dispatch函数中。

进入dispatch后,之前溢出shellcode之后的35将再次触发0798的漏洞,函数首先分别获取参数1偏移0x28,和0x2a处的数据,并保存到局部变量中,需要注意是获取的是两字节,赋值后内存中变成了00445800.

0044实际上只之前sub_4428F0函数的返回地址。

有意思的是在漏洞函数中sub_438349中,该函数会设置对应传入的a2,a3地址的值,此时正好将00445800设置为00440000(该值在之后的利用中被使用).

如下所示之后35之后依次读取的5个字节为35, 33,36,20,44(其中用于控制溢出长度的字节为20,44)。

第一次拷贝,拷贝地址为0012f35c,长度的控制参数为20.

第二次拷贝,拷贝地址为0012f376,长度的控制参数为44.

拷贝前的堆栈数据。

拷贝后的栈数据,此时返回地址已经被修改为00430bfb,需要注意的此时覆盖的只是返回地址的第四位,即高四位并没有被修改,返回地址后四位即为传入的第一个参数00281c3c,同样需要注意的还有00281c3c之后的00440000,现在来整理以下第二次漏洞利用的流程

00281c3c作为参数一传入0798漏洞函数,之后分别获取00281c3c偏移40,42处的内容),并赋值给v5,v6,其中v5就是0044000(其来源上文中已经说明),之后将00281c3c,v5,v6分别作为2,3,4参数传入到dispatch函数中。

之后进入漏洞函数2,3,4参数又分别作为1,2,3参数来调用case 4处的漏洞函数。

此时函数返回,由于之前的漏洞将函数的返回地址已经修改为00430bfb,而该地址对应的反汇编代码为ret,执行ret,将导致程序的执行流程直接进入到00430bfb之后的00281c3c中。

00281c3c向下执行,最终导致执行之后00281c3c中已经构造好的shellcode

这里可以看到在jmp前,有一条pop eax的操作,此时pop,即将之前栈上00281c3c之后的00440000赋值给eax,该值作为之后shellcode中寻址的高位地址,最终从此处进入到攻击者控制的流程中。

由此可以看到该样本中0798和正常0798的区别之处

  1. 首先正常进行一次0798的漏洞利用,在上布置好后续的shellcode
  2. 之后精心在函数sub_4428f0中构造出一段包含跳板shellcode的内存,并将该段内存作为参数再次调用0798函数。
  3. 再次触发漏洞,通过ret的方式将程序的执行流程定向到之前的跳板shellcode中。

总结

如下所示即可看到11882/0802/0798这三个漏洞的混淆点了,对于这三个漏洞,除了绿色1c,*8(11882,0802),*1/*4-*5(0798)不能变,其他位置都是可变的,其中紫色指有要求的变(第一处不能大于0x20000,第二处只能为01(当为01时,metf头由五位变成1位,即之前的后四位去掉),02,03,102,103),当metf为五位时,之后的一位,即第六位实际上是可以导致之后有附加数据的,及下图中的蓝色部分,因此metf头之后和tag头之间也是可以插入混淆数据的。除此之外eqnolefilehdr,mtef head其余位置应该都是可以随便搞的。

之后mtef byte stread中可以插入任意多的tag,只要保证最终进入08,05tag即可,因此在紫色01和绿色08之间也是可以加入混淆数据的(通过0798中的处理或标准流程中11882处理(>9,01,04会进入0798),0798中还依赖dispatch来处理,case0/case1/case5流程中是可以再次进入到0798,如上文的第2,4个样本。

转载请注明出处

原文地址:https://www.cnblogs.com/goabout2/p/10201155.html

时间: 2024-08-30 02:04:53

Equation漏洞混淆利用分析总结(下)的相关文章

Equation漏洞混淆利用分析总结(上)

Office Equation类型的漏洞从2017年底开始被发现,到目前一共可用的有11882,0802,0798三个漏洞,可以说2018年office中使用最多的也是这三个漏洞,也是office中混淆利用最繁杂的一类漏洞(应该没有之一),由于equation本身的问题导致这三个漏洞的在利用的混淆上有很多的变种,有意思的是这些混淆的技巧在三个漏洞中基本是通用的,本文通过几个样本来对这几个漏洞的混淆利用进行一次总结. 首先无论是11882,0802,还是0798,一个正常的利用样本的结构如下所示,

Java反序列化漏洞通用利用分析

2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSphere.JBoss.Jenkins.OpenNMS这些大名鼎鼎的Java应用,实现远程代码执行. 然而事实上,博客作者并不是漏洞发现者.博客中提到,早在2015年的1月28号,Gabriel Lawrence (@gebl)和Chris Frohoff (@frohoff)在AppSecCali上给出了

JAVA Apache-CommonsCollections 序列化漏洞分析以及漏洞高级利用

作者: 随风 漏洞原理分析 该漏洞的出现的根源在CommonsCollections组件中对于集合的操作存在可以进行反射调用的方法,并且该方法在相关对象反序列化时并未进行任何校验,新版本的修复方案对相关反射调用进行了限制. 问题函数主要出现在org.apache.commons.collections.Transformer接口上,我们可以看到该接口值定义了一个方法 我们可以看到该方法的作用是给定一个Object对象经过转换后同时也返回一个Object,我们来看看该接口有哪些实现类 这些tran

CVE-2014-0322漏洞成因与利用分析

CVE-2014-0322漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存,对指定内存处的值进行了加1.其特点在于攻击者结合flash实现了对漏洞的利用,第一次分析这种IE+Flash组合的漏洞利用因此写下此文档作为记录. 2. 实验环境 操作系统:Win7 SP1 浏览器:IE 10.0.9200.16798(补丁打到MS14-010(KB2909921)) 漏洞编号:CVE-2014-0322 微软补丁:MS14-012 3. 漏洞

CVE-2013-3897漏洞成因与利用分析(UAF类漏洞分析流程)

CVE-2013-3897漏洞成因与利用分析(UAF类漏洞分析流程) 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存.攻击者可以利用此类漏洞实现远程代码执行.UAF漏洞的根源源于对对象引用计数的处理不当,比如在编写程序时忘记AddRef或者多加了Release,最终导致对象的释放.对于IE的大部分对象(COM编程实现)来说,+4偏移处的含义是该对象的引用计数,可以通过跟踪它来定位补丁前后的位置及被释放的位置.+0偏移处的含义是该对象的虚函数表指针,可以通

【转】cve2014-3153 漏洞之详细分析与利用

By kernux TopSec α-lab 一 漏洞概述 这个漏洞是今年5月份爆出来的,漏洞影响范围非常广.受影响的Linux系统可能被直接DOS,精心设计可以获取根权限.该漏洞主要产生于内核的 Futex系统调用.Futex是快速用户空间mutex的意思,它是glibc中的互斥量实现的基础.内核空间其实只是提供了很简单的futex接 口,futex函数定义在/liunx/futex.c中,漏洞利用了 futex_requeue,futex_lock_pi,futex_wait_requeue

网站安全检测之用户密码找回网站漏洞的安全分析与利用

我们SINE安全在对网站,以及APP端进行网站安全检测的时候发现很多公司网站以及业务平台,APP存在着一些逻辑上的网站漏洞,有些简简单单的短信验证码可能就会给整个网站带来很大的经济损失,很简单的网站功能,比如用户密码找回上,也会存在绕过安全问题回答,或者绕过手机号码,直接修改用户的账户密码. 在短信×××,以及用户密码找回的网站漏洞上,我们来跟大家分享一下如何利用以及如何防范该漏洞的×××. 我们来看下之前对客户网站进行的网站安全检测的时候我们发现到的短信×××漏洞,由于客户反映注册网站会员的时

Windows应急响应和系统加固(6)——Windows历年高危漏洞介绍和分析

Windows历年高危漏洞介绍和分析 一.漏洞介绍: 1.漏洞: <1>.漏洞:是影响网络安全的重要因素: <2>.漏洞利用:成为恶意攻击的最常用手段: <3>.漏洞攻击:产业化.低成本化.手段多样化.低门槛趋势: <4>.信息化时代:无论个人/企业,都面临严峻的漏洞威胁: <5>.Windows.Office.IE.Edge.Flash等高危漏洞频繁曝光. 2.Windows漏洞: <1>.MS08-067 RCE漏洞: <2

[转载20131024]Nginx服务器漏洞的利用和修复方法

本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因.利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容. Nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,可以稳定地运行在Linux.Windows等操作系统上,其特点是占用内存少,并发能力强. 同其他软件一样,Nginx也出现过一些安全漏洞,利用这些漏洞可以对Web