标题 | 简介 | 类型 | 公开时间 | ||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
详情 | |||||||||||||||||||
[SAFE-ID: JIWO-2025-2384] 作者: ecawen 发表于: [2019-05-17]
本文共 [748] 位读者顶过
1.bindiff安装java环境:需要安装java环境。我用的jre-8u171-windows-x64。bindiff下载:需要翻墙到官网下载。这里用的是bindiff420-win-x86,不断下一步就可以了。注意:安装路径要设置到自己的IDA目录
2.bindiff使用
详见安装目录的:file:///C:/Program%20Files%20(x86)/zynamics/BinDiff%204.2/doc/index.html[出自:jiwo.org]
bindiff是结合IDA一起使用的,首先使用IDA打开一个可执行文件(如打补丁之后的exe),保存配置idb,保持这个ida;然后再用ida打开要比较的文件(如打补丁之前的文件) ,保存配置idb,关掉这个ida 。
之后在打补丁之后的exe 的IDA窗口,使用快捷键crtl+6 , 弹出bindiff插件窗口,选择Diff Database选择要比较的idb文件 ,这里就是OldEnqEdit.idb
bindiff就会比较两个可执行文件之间函数的差异。从上到下看,可以看到差异较大的函数是哪个。
在关闭IDA是可以选择保存bindiff生成的信息,之后再次打开直接选择loadresults 可以达到一样的效果。
各位已经看到了上面用来做演示的程序了,是wps的公式对象程序,分别是wpsoffice2010_10.1.0.6930和当前官网上最新的。关注厄运公式漏洞的朋友知道在office中这个模块有两个漏洞一个是11882,而另外一个是0802,而这个模块在office中已经被取消了(也就没有0802的补丁了)。
那么,wps office有没有类似的公式对象呢?如果有,有类似的漏洞吗?都被正确的修补了吗(尤其是第二个)?
要找到wps公式对象的位置很简单 ,打开wps,
弹出公式编辑器
在任务管理器中找到程序路径即可。
4.小试牛刀
这里比较这两个版本的公式对象程序
接着第二步的往后讲, 看最下面三个函数
同时也用IDA打开OldEqnEdit.exe
4.1 sub_4200E2
new:
New中v7是局部变量,从传入a1参数拷贝到v7使用的是 qmemcpy(v7, a1, v4);v4肯定小于等于32,嘿嘿和office 公式对象字体名称最大长度一样啊(不明白的可以搜搜CVE-2017-11882相关的文章看看)
Old
Old中是直接从 a1 拷贝字符串到 v6 ,可以造成栈溢出 。
从sub_4200E2来看,感觉就是厄运公式的补丁嘛,嘿嘿。
4.2接着看第二个 sub_41189B
Old
在new中很多
if ( v3 >= 0x21 )
v3 = 32; qmemcpy(v17, a1, v3); 这种代码片断,然后在Old中对应的都是 strcpy((char *)a3, &v5);
还是针对字体名字长度的修补。
4.3
有点不清晰,这个时候不断尝试,由 sub_4200E2往上翻,熟悉的场景看到了,就是围绕 lpLogfont 的围追堵截:
且不考虑之前的漏洞编号,既然下面的补了,我们往上看。
瞅瞅
v15 = sub_4202EF((char *)lpLogfont, a2); 以及
sub_42048D(lpLogfont, a2, (LPARAM)&lf);
sub_4202EF 没啥有用的
sub_42048D ,啦啦啦, strcpy((char *)(lParam + 28), lpLogfont); office直接取消了Equation,再也没有这方面的洞了,但是wps却没有重视这个啊
由于种种原因这里不方便构造样本以及调试(请在win7 32位系统下od加载运行C:\Users\xx\AppData\Local\Kingsoft\WPS Office\11.1.0.7720\office6\mui\default\resource\ksee\EqnEdit.exe,并在上面提到的关键函数下好断点,拖入文档点击公式对象,就可以断下来。)有兴趣的小伙伴可以自行实验,关于样本的构造和调试可以参考 http://www.freebuf.com/vuls/160115.html 。补充一点,wps的公式对象程序和office的是不一样的,一个厂家出的,wps版本更新点。
|