Adobe PDF檢測流程

生成具有破壞格式的PDF演示文件如下(此演示文件只演示了造成漏洞的代碼,沒有攻擊性)

  

其中,stream字段中的第5字節(jié)的第6位,在JBIG2的解析過程中用來說明是“大頁”(a large page) ,其大小在后續(xù)四個字節(jié)給出,如圖 41 42 43 44。

崩潰處代碼

此段代碼為Adobe Reader解析JBIG2的代碼,其中先讀取圖像大小,然后進行解壓縮操作,將解壓后的二進制文件寫入相應(yīng)的內(nèi)存地址。

由于計算地址時未檢驗 ,從調(diào)試中可以看到eax最初值為文件中指定的0x44434241,在計算eax+eax*4后,有計算ecx類的地址ecx+eax*4-14的位置,該位置超出了正常的內(nèi)存。于是對計算出來的錯誤內(nèi)存地址進行寫操作,造成崩潰。

但是如果事先通過其他手段進行了Heap Spray(例如用Javascript對堆進行淹沒攻擊),則可以將文件解壓后釋放到目標內(nèi)存中(示例中為”AAAA…”),其中,可以通過修改圖上所示的 41 42 43 44 字段,指定溢出地址。

  

由此可以看出,只要將ShellCode以JBIG2格式進行壓縮放入該stream中,就可以在解析的時候釋放到指定的位置,然后配合Heap Spray技術(shù),通過其他手段,將EIP跳轉(zhuǎn)到ShellCode的位置去執(zhí)行。

分享到

yajing

相關(guān)推薦