CVE-2017-11882分析和白象样本分析

admin 2024年5月25日21:27:04评论5 views字数 2526阅读8分25秒阅读模式

CVE-2017-11882是微软公布的一个远程代码执行漏洞,漏洞是由模块EQNEDT32.EXE公式编辑器引起,该模块在Office的安装过程中被默认安装,该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。

漏洞产生原因是公式编辑器EQNEDT32.EXE(路径C:Program FilesCommon Filesmicrosoft sharedEQUATION)读入包含MathType的OLE数据,在拷贝公式字体名称时没有对名称长度进行校验,使得攻击者可以通过刻意构造的数据内容覆盖栈上的函数返回地址,造成栈缓冲区溢出,劫持程序执行流程,执行自己的恶意代码,又因为插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程的子进程创建,而是以单独的进程形式存在。所以Office进程的保护机制也无法保护EQNEDT32.EXE这个进程被利用。从漏洞利用效果来看,它可以通杀Office 2003到2016的所有版本。
apt组织像蔓灵花、白象、摩诃草、响尾蛇利用该漏洞文档发起攻击。
(以上内容来自互联网)

漏洞分析
系统环境:win10
office版本:office 16
poc:
https://github.com/Ridter/CVE-2017-11882

因为双击poc后会弹出calc.exe,所以在CreateProcess和WinExec函数下断点。


CVE-2017-11882分析和白象样本分析
断在WinExec函数处,WinExec的返回地址是00430C18,参数19ef00,内容是通过cmd打开calc.exe。


CVE-2017-11882分析和白象样本分析
此时ebp应该存储调用者ebp,但是现在是41414141,ebp被破坏了,向上低地址(低地址有已经执行过的函数堆栈)查找ebp是在哪被破坏的。

411658处指令 rep movsd,将esi内容复制到edi,ecx个双字大小
rep movs byte ptr es:[edi], byte ptr ds:[esi] 简写为: rep movsb
rep movs word ptr es:[edi], word ptr ds:[esi] 简写为: rep movsw
rep movs dword ptr es:[edi], dword ptr ds:[esi] 简写为: rep movsd
复制次数由ecx决定。

EDI 为 ebp-28(40字节),复制内容大小为48字节,41414141覆盖ebp,剩余四字节覆盖返回地址。跳转到返回地址执行call WinExec函数,参数已经在栈中。(ecx大于A就会破坏ebp。大于B破坏到返回地址)


CVE-2017-11882分析和白象样本分析

断点断在WinExec函数处,
从栈中查找调用winexec的函数(向高地址找)。


CVE-2017-11882分析和白象样本分析

分析4115a7函数,调用41160f函数,411658处调用不安全的strcpy函数,没有对参数的长度进行判断和限制,导致栈溢出。


CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析

成功弹出计算器。

CVE-2017-11882分析和白象样本分析



白象组织诱饵文档

定位漏洞


使用pchunter和 process Monitor 定位产生漏洞的模块,是EQNEDT32.EXE。


CVE-2017-11882分析和白象样本分析

并且利用forfiles进程执行释放文件mcods.exe(C:ProgramDataMicrosoftDeviceSyncmcods.exe)

利用IFEO劫持调试

计算机HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution OptionsEQNEDT32.EXE


CVE-2017-11882分析和白象样本分析


漏洞利用


根据cve的分析,将断点下在411658处,不断F9(注意exc的值,当大于B时查看)此时exc为0xC,F8后如下图堆栈被覆盖。

返回地址被覆盖为48C7C2。

CVE-2017-11882分析和白象样本分析
继续执行到函数结束处leave指令,ret指令。

Leave等价于:
movl %ebp %esp
popl %ebp

RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序。

跳转到返回地址48C7C2,执行ret指令。


CVE-2017-11882分析和白象样本分析

ret指令执行后跳转到19eec4处,fs段寄存器偏移0x30h,可以找到PEB。第一个fs:[30h]+2指向了PEB的BeingDubgged,BeingDubgged=1的时候就是被调试。

19eec4来源说明:
在执行411658处指令之前,堆栈中已经存在19eec4,看堆栈可知是41160f函数的参数。

CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析

接着看19EEC4处指令,绕过反调试后(BeingDubgged修改为0)获取第二段shellcode地址跳转执行。


CVE-2017-11882分析和白象样本分析

获取pe写入"C:ProgramDataMicrosoftDeviceSyncmcods.exe"


CVE-2017-11882分析和白象样本分析

添加到自启动项


CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析

调用ShellExecuteA函数执行命令“forfiles.exe /p c:windows /m twain_32.dll /c c:windowsuser..programdatamicrosoftdeviceSynCmcods.exe”


CVE-2017-11882分析和白象样本分析


mcods.exe分析


隐藏窗口。


CVE-2017-11882分析和白象样本分析

判断是否是中国时区。


CVE-2017-11882分析和白象样本分析

如果是中国时区执行sub_408E80函数。

sub_408E80


创建rendumm互斥体。


CVE-2017-11882分析和白象样本分析

解密出UserAgent,获取uuid。


CVE-2017-11882分析和白象样本分析

获取用户名和计算机名。


CVE-2017-11882分析和白象样本分析

获取系统版本,本机ip地址,后门版本。


CVE-2017-11882分析和白象样本分析

拼接出字符串如下图随所示。格式:uuid=用户标识#un=用户名#cn=计算机名#on=系统版本#lan=本机IP地址#nop=#ver=后门版本
CVE-2017-11882分析和白象样本分析

创建线程,将获取的信息作为线程函数参数传递。线程函数:将信息AES加密+base64+指定位置加入=或者&。


CVE-2017-11882分析和白象样本分析

使用http协议post上传加密信息到C2服务器。


CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析

除了上述获取的信息外,mcods.exe还会收集以下信息。


CVE-2017-11882分析和白象样本分析

写入到temp路径下的BdZ22x.tmp文件中。


CVE-2017-11882分析和白象样本分析

之后读取BdZ22x.tmp文件,AES加密+base64,上传文件。

CVE-2017-11882分析和白象样本分析

C2指令


CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析

指令33:从指定url下载文件


CVE-2017-11882分析和白象样本分析

CVE-2017-11882分析和白象样本分析

看雪ID:pyikaaaa

https://bbs.kanxue.com/user-home-921642.htm

*本文为看雪论坛精华文章,由 pyikaaaa 原创,转载请注明来自看雪社区

原文始发于微信公众号(看雪学苑):CVE-2017-11882分析和白象样本分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月25日21:27:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2017-11882分析和白象样本分析https://cn-sec.com/archives/2778128.html

发表评论

匿名网友 填写信息