二、环境准备 虚拟机
调试工具
目标软件
16进制编辑器
Win7X86SP1、Kali
Ida、x32dbg
Adobe Acrobat_Reader 9.0
010Editor
三、漏洞复现
使用MSF生成EXP:
然后在Win7中安装Adobe Acrobat_Reader 9.0:
把Kali中的Exp拖到本机,再拷贝到Win7中,拖到Adobe中:
弹出计算器,证明漏洞存在,Exp也没有问题。
四、漏洞分析 首先我们需要做几个准备工作,1、改掉随机基址,省的麻烦,把用010Editor打开Adobe,修改如下地方:
2、在把软件拖调试器中,忽略程序自身异常(因为我这边调试器接管异常,导致程序运行不下去,所以需要忽略)
接下来就是正儿八经分析了,因为已知漏洞问题是在CoolType.dll,直接在安装文件夹下找到这个dll,拖到Ida中:
然后Alt+T,搜索sing:
双击到标记的一条:
下面这一坨就是漏洞溢出的地方,如果有需要可以自行分析一下,或者使用其他手段找到溢出点:
我们直接看strcat函数,地址是0x0803DCA4,这里基址是0x08000000,所以函数偏移是3DCA4,接下来我们就是动态追踪一下计算器弹出的具体过程,用x32dbg附加软件,F9运行,等软件加载完所需要的dll,然后
查看各个模块基址,找到CoolType.dll,基址是0x60690000,那么加上偏移就是0x3DCA4=0x606C DCA4:
跳转到0x606CDCA4,下断点:
接下来把我们生成的Exp拖到软件中,稍微等会,就断在了我们断点处,然后在堆栈窗口中转到EBP,观察溢出情况:
我们先看看strcat函数的俩个参数,堆栈中转到ESP,可以看到,源数据和要拷贝的地址,而要拷贝的地址就是EBP:
然后走过strcat函数,观察EBP的位置,发现已经被淹没覆盖:
然后继续往下走,走到如下函数单步步入:
然后步入下面这个call:
然后步入第一个call:
然后走到如下位置:
这里的call是exp特意构造的,如果追寻eax的来源,就会发现他指向我们拷贝的数据中的一个地址,这里是把栈抬高到我们淹没EBP那里,进入这个函数就会发现,函数流程已经被我们劫持了,从这里开始就进入我们的流程:
接下来会进入一系列ROP链(这里使用了堆喷技术,目的为了绕过DEP):
走到这里,调用了一个CreateFile创建了一个iso88591文件,其参数都是Exp构造好的:
21.png
!
文件在这:
在这里可以看到EAX指向一个CreateFileMapping函数,创建文件映射:
随后跳转到此函数:
之后根据同样手法,进入MapViewOfFile函数,将一个文件映射对象映射到当前应用程序的地址空间:
跑了半天,又用之前的手法走到memcpy函数,如果留意的话,就会发现,这里是把shellcode写到MapViewOfFile返回的地址,因为这里是可写可读可执行,绕了半个地球,就是为了绕过DEP:
然后这里就是正儿八经shellcode地方:
经过一段解密,可以看到字符串calc.exe:
从这里可以看到是通过CreateProcessA创建了计算器:
以上就是Exp的运行过程,最后弹出计算器的结果。
五、总结 这个Exp的编写用了很多技术,包括利用了PDF文件可执行js代码的特性,然后使用栈溢出劫持运行流程到icucnv36.dll,这个模块没有ASLR保护,然后再通过ROP链,各种寄存器布置,然后新建文件,又将文件映射到内存,再把shellcode拷贝到这块区域。 参考链接:http://static.anquanke.com/download/b/security-geek-2019-q2/article-12.html