《漏洞战争》- 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的分析可以参考漏洞战争一书中的内容
posted on 2019-09-19 20:21 sdfsdfdvsd 阅读(288) 评论(0) 编辑 收藏 举报