《漏洞战争》- CVE-2010-2883(上)

Posted hell--world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《漏洞战争》- CVE-2010-2883(上)相关的知识,希望对你有一定的参考价值。

综述

本文内容基于漏洞战争一书中对于漏洞CVE-2010-2883攻击样本的分析,在书中分析的基础上,本文着重展现漏洞利用过程中shellcode的执行过程,通过调试加深对漏洞利用过程的理解。

由于本文图片数量较多,所以分为上下两篇文章发布 由于博客图片显示不清楚,故给出高清原文下载链接: https://pan.baidu.com/s/1KFyD8FJQXbiTfC2vmEmBMw 提取码: mq6h 

实验环境

漏洞利用环境与书中要求的一致,不再赘述

漏洞成因

以下指令存在于模块CoolType.dll中,其中最后一条指令的strcat函数因为没有对参数的有效性进行检验,故存在被利用于进行缓冲区溢出攻击的风险,具体漏洞成因可见漏洞战争一书。

技术图片

调试过程

使用od附加指定版本的adobe reader程序,按f9运行,程序初始化完毕后CoolType.dll已经被加载到进程空间中。

技术图片

 

根据书中给出的溢出点,在0x803ddab地址(即溢出函数strcat)上下断点,之后使用adobe reader打开攻击样本,程序将断在该断点处。

技术图片

技术图片

 

溢出发生之后继续f8调试,发现程序在指令call 08016bde之后跑飞,则推测该函数中执行漏洞利用指令,故进入该函数分析

技术图片

 

在08016bde函数中程序执行call 0801bb21时跑飞,则继续跟进该函数

技术图片

 

函数0801bb21中,程序在地址0801bb41处跑飞,跟进该函数

技术图片

 

函数0801bb41中,程序在地址0808b308处跑飞,跟进该函数

技术图片

 

f7跟进0808b308地址处的指令,发现第一个rop块,此时程序执行流程已经被改变,分析原因发现地址0x0808b308处的指令为call [eax],此时eax为0x0012e6d0,而在strcat产生溢出的过程中,内存地址0x12e4d8之后的内存会被覆盖,所以地址0x0012e6d0处的内存可以被修改,从而产生了进程劫持的可能。

这里的leave指令相当于mov esp,ebp pop ebp,该指令执行完成后栈顶被重新设置为12e4e0,该部分内存也已经被溢出覆盖,使得程序可以继续顺着rop链执行。

技术图片

技术图片

 

第二个rop块是将esp设置为0c0c0c0c,推测漏洞利用过程中使用了堆喷射技术,通过该rop块,将栈顶修改为0c0c0c0c,从而完全掌握栈的控制权。

技术图片

 

通过在攻击样本中嵌入javascript代码,实现当pdf文件被打开时执行堆喷射操作,相关堆喷代码可以通过工具PdfStreamDumper打开样本得到,也可参看漏洞战争一书中的内容。

技术图片

 

Rop3中将ecx指向指定字符串,推测在设置相关函数参数

技术图片

 

Rop4

技术图片

 

rop5中将eax指向CreateFileA函数,疑似之后需要调用该函数。

技术图片

 

调用CreateFileA函数,创建名为iso88591的文件技术图片

 

CreateFileA函数内部调用CreateFileW函数 之后执行retn 1c返回

技术图片

 

CreateFileW函数返回后执行rop块,继续返回

技术图片

 

执行pop ecx retn,可以看见栈中存在CreateFileMappingA函数的地址,推测此时shellcode正在构造参数准备调用该文件映射函数。

技术图片

 

交换eax和edi的值

技术图片

 

给ebx赋值

技术图片

技术图片

 

将CreateFileMappingA的地址赋值给EAX,推测准备调用该函数

技术图片

 

调用CreateFileMappingA函数

技术图片

 

在CreateFileMappingA函数内部调用CreateFileMappingW函数之后retn 18返回

技术图片

技术图片

 

疑似准备构造参数,调用MapViewOfFile函数

技术图片

技术图片

技术图片

技术图片

技术图片

 

综上调用MapViewOfFile函数的套路和调用CreateFileMappingA的套路相同

技术图片

 

MapViewOfFile函数内部调用MapViewOfFileEx函数

技术图片

 

执行return

技术图片

 

将ecx指向字符串"32",疑似设置参数

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

 

注意下图中执行指令call ecx之后程序即跳转执行retn,返回继续执行add esp,10和retn

技术图片

 

call ecx之后执行retn指令

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

 

memcpy函数内部

技术图片

技术图片

技术图片

(勘误:上图中edi指向0x3721000而不是esi)

 

以上是关于《漏洞战争》- CVE-2010-2883(上)的主要内容,如果未能解决你的问题,请参考以下文章

CVE-2010-2883 从漏洞分析到样本分析

CVE-2010-2883 从漏洞分析到样本分析

CVE-2010-2883 从漏洞分析到样本分析

Adobe Reader 缓冲区溢出漏洞 (CVE-2010-2883)漏洞分析报告

CVE-2010-2883_Adobe_cooltype_sing

《漏洞战争》-CVE-2010-3333(上)