-
-
[原创]CVE-2017-11882分析和白象样本分析
-
-
[原创]CVE-2017-11882分析和白象样本分析
CVE-2017-11882分析和白象样本分析
CVE-2017-11882是微软公布的一个远程代码执行漏洞,漏洞是由模块EQNEDT32.EXE公式编辑器引起,该模块在Office的安装过程中被默认安装,该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。漏洞产生原因是公式编辑器EQNEDT32.EXE(路径C:\Program Files\Common Files\microsoft shared\EQUATION)读入包含MathType的OLE数据,在拷贝公式字体名称时没有对名称长度进行校验,使得攻击者可以通过刻意构造的数据内容覆盖栈上的函数返回地址,造成栈缓冲区溢出,劫持程序执行流程,执行自己的恶意代码,又因为插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程的子进程创建,而是以单独的进程形式存在。所以Office进程的保护机制也无法保护EQNEDT32.EXE这个进程被利用。从漏洞利用效果来看,它可以通杀Office 2003到2016的所有版本。
apt组织像蔓灵花、白象、摩诃草、响尾蛇利用该漏洞文档发起攻击。
(以上内容来自互联网)
漏洞分析
系统环境:win10
office版本:office 16
poc:247K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9K9h3c8@1k6i4u0Q4x3V1k6o6g2V1g2Q4x3X3b7J5x3o6p5%4i4K6u0V1x3e0p5^5z5o6t1`.
因为双击poc后会弹出calc.exe,所以在CreateProcess和WinExec函数下断点

断在WinExec函数处,WinExec的返回地址是00430C18,参数19ef00,内容是通过cmd打开calc.exe。

此时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破坏到返回地址)

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

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


成功弹出计算器。
白象组织诱饵文档
定位漏洞
使用pchunter和 process Monitor 定位产生漏洞的模块,是EQNEDT32.EXE。

并且利用forfiles进程执行释放文件mcods.exe(C:\ProgramData\Microsoft\DeviceSync\mcods.exe)
利用IFEO劫持调试
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\EQNEDT32.EXE

漏洞利用
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!