-
-
[原创]cve-2010-2883分析
-
发表于: 2018-10-6 14:54 4546
-
研究的第一个cve,研究完觉得发现这个cve的人脑洞为什么能这么大。。
环境配置 :
漏洞点在SING表处,位于CoolType.dll文件处。
先将恶意pdf文件导入PDFStreamDumper,查看之后可以找到SING表的数据结构。
官方定义的SING的数据结构:
根据我们所找到的SING表的数据,可以知道偏移地址为0x11c。再往下找0x11c偏移处的内容:
但是在偏移0x10处的内容才是uniqueName域起始内容。
先来看看处理SING表的那一块函数地方。
先把字符串SING入栈,后入栈edi,调试可得:
暂且还不知道他的内容是怎么回事。继续看。
后来赋值了ecx。调用完函数之后eax中函数的返回值就是原ecx的值,来对比一下前后的值。
前八个字节发生了变化。在看后四字节0x1DDF。这不就是前面所看到的数据长度吗?所以我们可以推测出该函数大致上就是处理SING表内容的。再看看前四字节,调用完函数之后又重新赋值了一遍eax,刚好是把前四字节赋值给了eax。再看看后面对于eax的调用,又有一处加上了0x10,所以我们看看其地址处的内容:
这不就是前面所看到的SING表内容吗,后面调用eax加上0x10的原因就在于加上0x10后的地址处内容才是uniqueName域的内容。
然后看edi的作用,edi寄存器所指的地址内容设置一下内存访问断点,查看一下被什么调用即可,经多次查看之后就可以发现edi偏移0x30处的0x4A8F374被下面图中处代码调用过。
在查看一下该处地址的对应内容:
这是PDF文件中的字体对象。
所以说我们这里已经搞清楚了第一个call函数的用途:
函数通过传入表目录项的 TAG 名称,然后读取表目录项,处理后返回两个元素,第一个元素为表目录的内存映射地址,第二个元素为表目录的长度。
搞清了第一个函数之后再看看下一个漏洞点的函数:
用Ollydbg调试看看。
先是加上了0x10,即前文提到的uniqueName域,压入栈中,而后将ebp入栈,再调用strcat函数,所以说就是将uniqueName域拼接到ebp指向的地址。
因为并没有限制拼接的长度,所以就产生了溢出。
接下来跟踪查看一下作者所构造的ROP链,是如何来利用这个溢出漏洞的。跟踪反复调试过之后可以得出,先执行到此处。
进入sub_8016BDE函数中:
而后进入到sub_801BB21函数当中:
再进入[eax]函数处,即0x808b116:
再进入[eax]处的存放地址,实际上是栈中存放的地址:
eax:0x0012E6D0,call地址:0x4A80CB38 返回到 icucnv36.4A80CB38 来自 icucnv36.4A846C49
而strcat拼接的地址是从0x0012E4D8开始的。
继续看接下来的调用:
调用前:ebp --> 0x0012DD48
调用后:ebp --> 0x0012E4DC
esp --> 0x0012E4E0
ebp --> 0xE78B53AB
eip --> 0x4A82A714 icucnv36.4A82A714
接下去的ROP:
esp --> 0x0c0c0c0c
接下去就是在堆内存0x0c0c0c0c处构造好的shellcode了。
这种在0x0c0c0c0c处构造shellcode的方法是堆喷射。
我画了一个图,可以自行边调试边参考我画的在栈中执行的流程图。
可以看出来该跳转的稳定性主要来源于0x4A80CB38和0x4A82A714这两处地址,两处地址都位于icucnv26.dll的地址空间,而在Adobe的各个版本上,这个dll上的两处地址一直不变,所以该exploit在各个版本都很稳定。
返回到0x0C0C0C0C后栈中的情况:
先跳到0x4A8063A5处,
而后转入0x4A802196,
再转入0x4A801F90,
转入0x4A80B692,
调用CreateFile函数,再查看栈中的内容:
创建了一个名为“iso88591”的文件。
执行完该函数之后又用前面ROP调用CreateFileA相同的手法调用了CreateFileMapping函数,该函数创建了文件内存映射。此时调用的各个参数为:
后又执行,
调用MapViewOfFile函数,各个参数:
后调用memcpy函数,各个参数:
这里因为有着DEP的机制,所以说shellcode在堆栈上是无法执行的,因此这里就可以创建一个文件对象,然后映射到可读可写可执行的内存区域,再将shellcode拷贝到该区域,就可以执行shellcode了。而且恰好我们构造的ROP都处于icucnv36.dll,此处不受aslr保护,成功绕过aslr。
成功执行。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]Tcache利用总结 17417
- [原创]X-NUCA revenge骚思路getshell 10493
- [原创]2018东华杯momo_server详解 12168
- [原创]cve-2010-2883分析 4547
- [原创]hack.lu 2015 bookstore writeup 17061