CVE-2009-0927简介
Adobe Reader是非常流行的pdf阅读器,其Collab对象的getIcon函数存在缓冲区溢出漏洞
又pdf支持内嵌javascript,通过javascript调用getIcon传递恶意参数触发溢出漏洞,还是结合Heap Spray
PDF文档格式简介
打开一个PDF大概也能看懂
几经查找才找到exploit
https://www.exploit-db.com/exploits/9579/
但是用上面的也没触发崩溃,shellcode执行啥的
就敲了一下作者的代码,打开说格式错误
新建一个pdf,将作者代码粘贴进去也没报错
原来metasploit里面有
设置payload,看看options
生成
是加密了的
试试不适用加密生成
但是变量名还是用了随机字符
我们找到哪个地址,看看复制前的参数
跟着接下来"N"跟那个超长的字符串连接
将栈的顶部都填充成0a了
下一步将写入一个非法的地址,产生异常
那里是只读区域
我们查看一下SEH链
就会跳到0a0a0a0a了,我们去下断点吧
果然到达了这里
走过了一堆无效指令后
通过loadlibraryA啥的获取到MessageBox地址
最终执行shellcode,弹框
总结
就是通过strncpy,复制一个长的字符串到到一个局部变量那里(栈上),但是传递的第3个参数的长度值为0,所以是没复制成功的
功劳是在strcat上,从上面的截图就可以知道
extern char *strcat(char *dest, const char *src);
注意后面的才是src
其实strcat的实现是将dest复制到src指向的地址的后面
由于dest是太长的0a
覆盖了SEH处理程序,最后复制的时候到栈顶了还是不够,就写到00130000的只读区域,触发写异常,最终跳到
0x0a0a0a0a触发shellcode执行
ko!
第二次尝试
这次确实是strncpy造成的
可以看到这次的长度不是0
也是覆盖了seh
触发异常
最终弹出计算器
那之前为啥不是strncpy
ida看看源码
原来是v13即v5是"."的位置
应该是v7算结果为0了
动态调试看看
原来"."(0x2e),在第二个字符
那就知道V7就是0了慢导致strcpy发挥不了作用
功劳给了strcat