参考文档
https://github.com/houjingyi233/office-exploit-case-study/tree/master/CVE-2017-11882%26CVE-2018-0802%26CVE-2018-0798
https://www.anquanke.com/post/id/94841#h2-6
https://www.anquanke.com/post/id/87311
https://www.anquanke.com/post/id/87284
https://github.com/embedi/CVE-2017-11882
分析文件版本
win7 x86+office2007
eqnedt32.exe(这个软件是office2007自带的)
不是作为一个libc库而是一个单独的软件调试起来也比较方便
漏洞分析
上图标注的strcpy就是漏洞函数,动态调试一下可以看到呗拷贝的是一个字符串”TIMES NEW ROMAN “
查了一下这是一种字体
从https://github.com/embedi/CVE-2017-11882上下载了样本
(这东西已经是poc了,到这里项目的内容实际已经结束,为了学习分析方法,这里继续分析)
样本分析
下载样本进行测试(会被杀软无情删掉,我这边杀软一声不吭就删了),测试样本
加载要调试的文件
要调试的文件是正常运行的时候加载了一个exe,要调试那个exe。
如果是动态链接库,od提供了方案:alt+e可以找到加载的动态库(注:alt+c可以回到反汇编窗口,alt+b可以查看断点,alt+m可以查看加载不同段的加载地址对于开启pie的程序可以通过ida看到的地址找到对应地址),在动态库入口下断点即可。
但是exe需要修改windows注册表
打开注册表编辑器(regedit)
图中标了要修改值的路径,新加了一项EQNEDT32.EXE,加入了对应的值,上面的路径是调试器的路径(实际上包含中文路径应该也行,害怕中文路径不行改了个名字)
添加完这一项之后运行EQNEDT32.EXE这个程序就会弹出od调试界面
双击测试样本,在弹出的od界面中下断点(地址从ida里面找到,ctl+g能让光标跳转到某个地址,f2可以下断点)
在第二次运行到拷贝的时候(右击edi寄存器的值,数据窗口中跟随,可以在数据窗口中看到填充的值,应该是shellcode和返回地址)
在程序返回时返回到了WinExec函数
添加
有时候不知道断点应该下到哪里。
可以猜要完成某个功能需要使用什么api,可以使用api断点(当程序调用对应api的时候会断下来)(api就是操作系统给用户提供的接口,是一个个函数实现不同的功能)
可以在对应的函数处下断点(一般是CreateProcess创建进程)
- 很多函数有A和W版本,A表示Ascii,W表示宽字节
- CreateProcess,CreateThread是创建进程线程
- CreateRemoteThread是创建远程线程,是在本进程里创建一个其他进程的线程(一般实现一些动态链接库注入,API钩取之类的操作)
下完断点之后继续运行(f9)程序会暂停在断点处如图
注意上面的地址,这不是用户的地址空间,可以用快捷键Alt+f9运行到用户地址空间(需要程序能运行到返回)
从编写poc角度分析漏洞
待补充