zoukankan      html  css  js  c++  java
  • 《漏洞战争》- CVE-2010-2883(下)

    复制的内容转换为指令,复制的数据一部分是有意义的shellcode,另一部分为0x0c0c0c0c。

    memcpy返回之后,程序直接来到地址3720000处执行复制的指令,通过这种方式可以绕过dep保护。

    执行恶意指令过程中

    在函数037202f0中,shellcode计算指定api的hash值,推测之后通过hash比较获得特定api的地址,这里将kernel32模块中的导出名称表中的所有函数名称分别计算hash,然后与指定的hash值比较,即[esp+14],用于判断是否寻址到指定的api

    第一个寻址到的函数为ExitProcess

    将ExitProcess函数的地址保存在eax寄存器中 kernel32的基地址保存到edx中,之后函数返回

    返回之后,发现 37202f0函数会被循环调用,从而获得所有shellcode所需的api的地址

    获得的api地址依次为

    ExitProcess

    GlobalFree

    GetCommandLineA

    WinExec

    _hwrite

    _lcreate

    GetTempPathA

    CloseHandle

    GlobalAlloc

    ReadFile

    SetFilePointer

    GetFileSize

    调用GetFileSize函数,经调试函数返回值为-1,之后返回值会与-1进行比较

    循环调用GetFileSize函数

    循环调用GetFileSize过程中,对该函数的返回值进行判断,是否为-1、是否大于200,如果返回值大于2000则执行之后的指令,否则继续循环执行GetFileSize    

    当文件大小满足指令要求时

    这里是根据文件的大小和文件指定位置的数据,寻找满足指定性质的文件

    从内存中提取pdf文件

    文档内容

    通过对文档内容的分析,发现读入内存的pdf文件即为攻击样本文档

    读取文件完毕后,关闭文件句柄

    之后修改攻击样本文档在内存中的数据,从高地址到低地址修改数据,并且一次修改一个字节

    当eax为0时循环结束

    比较内存中文件数据被修改前后的区别,通过文件对比,发现文件中间大部被修改,首尾部分数据没有被修改

    调用函数获取临时文件的指定路径

    之后的调试过程中,由于中间重新运行了调试器,而且存放恶意代码的内存空间是动态申请的,故之后的分析恶意代码起始地址为0x036d0000

    指定路径创建文件svrhost.exe

    向文件中写入数据

    GetCommandLine用于获得当前进程命令行字符串

    经分析第二次写入内存的pdf文件是有关企业面试的资料,与攻击文档名称相关,推测程序开始释放真实的文档内容

    _lcreate函数返回值为-1,疑似创建进程失败

    当创建pdf阅读器进程成功时。(此时被执行的恶意代码基址为3670000)

    如果将closehandle去掉,继续观察后面的指令执行

    针对shellcode释放的恶意文件svrhost.exe的分析可以参考漏洞战争一书中的内容

  • 相关阅读:
    第15周作业
    迟到的第14周作业
    第13周作业集
    第11次作业--字符串处理
    找回感觉的练习
    第9次作业--接口及接口回调
    20194684 + 自动生成四则运算题第一版报告
    css的calc在less文件中计算有误问题
    react 细节整理
    js async属性
  • 原文地址:https://www.cnblogs.com/hell--world/p/11552312.html
Copyright © 2011-2022 走看看