zoukankan      html  css  js  c++  java
  • 《漏洞战争》- 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)

  • 相关阅读:
    转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
    linq 动态组合条件
    转:Web应用程序项目XX已配置为使用IIS
    转:centos彻底删除文件夹、文件命令
    转:WebClient类(温习一下)
    解决 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
    转:装完Centos7提示Initial setup of CentOS Linux 7 (core)
    PL/SQL Developer 登录 Oracle 12c和Win10下安装Oracle 11g
    centos7-linux安装docker(离线方式)
    windows7安装gitblit
  • 原文地址:https://www.cnblogs.com/hell--world/p/11552084.html
Copyright © 2011-2022 走看看