​《0day安全》——CVE-2009-0927 PDF中的JS

CVE-2009-0927简介

Adobe Reader是非常流行的pdf阅读器,其Collab对象的getIcon函数存在缓冲区溢出漏洞

又pdf支持内嵌javascript,通过javascript调用getIcon传递恶意参数触发溢出漏洞,还是结合Heap Spray

PDF文档格式简介

打开一个PDF大概也能看懂

blob.png

几经查找才找到exploit

https://www.exploit-db.com/exploits/9579/

但是用上面的也没触发崩溃,shellcode执行啥的

就敲了一下作者的代码,打开说格式错误

新建一个pdf,将作者代码粘贴进去也没报错

原来metasploit里面有

blob.png

设置payload,看看options

blob.png

blob.png

生成

blob.png

是加密了的

blob.png

试试不适用加密生成

但是变量名还是用了随机字符

blob.png

我们找到哪个地址,看看复制前的参数

blob.png

跟着接下来"N"跟那个超长的字符串连接

blob.png

blob.png

将栈的顶部都填充成0a了

blob.png

下一步将写入一个非法的地址,产生异常

blob.png

那里是只读区域

blob.png

我们查看一下SEH链

blob.png

blob.png

就会跳到0a0a0a0a了,我们去下断点吧

果然到达了这里blob.png

走过了一堆无效指令后

通过loadlibraryA啥的获取到MessageBox地址

最终执行shellcode,弹框

blob.png

总结

就是通过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

blob.png

也是覆盖了seh

blob.png

触发异常

blob.png

最终弹出计算器

blob.png

blob.png

那之前为啥不是strncpy

ida看看源码

原来是v13即v5是"."的位置

应该是v7算结果为0了

blob.png

动态调试看看

原来"."(0x2e),在第二个字符

那就知道V7就是0了慢导致strcpy发挥不了作用

功劳给了strcat

blob.png

打赏作者
喜欢本博客,打赏让博客永久运行,多少你说了算

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注