CVE-2013-2729 Adobe Reader和Acrobat 數字錯誤漏洞

Ox9A82發表於2016-08-14

  這個洞是在論壇裡看到的,感覺很有意思,來學習一下。個人感覺IE或者說是瀏覽器的洞和Adobe洞都是比較難調的,主要是有大量的類難以摸清之間的關係。

  這個洞是一個整數溢位的洞,這個不是重點。重點是利用的思路,利用思路是挖坑法,即所謂的make hole,通過挖坑來洩漏dll的基址,然後再加以利用。make hole並不是獨門絕技,這種方法在IE和Adobe的漏洞利用中都有出現(主要是因為可以嵌入js,實現自由分配記憶體?),但是我覺得這種方法還是很巧妙的,就像大牛說的是一種比較優雅的手法。尤其是對記憶體的精準控制,個人感覺是一種藝術:)

   

漏洞的關鍵點如圖所示,xpos和ypos的來自於pdf檔案中,其中如果xpos在檔案中的初始值為0xff那麼經過運算後為可控制為0xFFFFFFF8

而這裡xpos是當作有符號數來運算的,就是說有符號數發生了上溢成了負數(注意,此堆塊稱為texture)。下面來看exp作者是怎麼利用這個整數溢位的。

作者首先控制texture的大小為0x130位元組(texture大小可由xpos和ypos控制),然後在記憶體中利用js分配大量的0x130個位元組大小的字串物件,然後間隔的釋放字串物件實現挖坑。這時texture就會落在坑中。通過整數溢位向此堆頭的8個位元組寫入,致使reader釋放了前一個0x130大小的字串物件。然後reader會建立一個0x130大小的imgstruct,這個結構中包含有虛表指標。由於js在分配字串物件時保有指標,那麼這時就可以直接讀出虛表地址。通過虛表地址可以獲得AcroRd32.dll模組的基址,這就實現了繞過aslr。然後通過釋放imgstruct的記憶體,再在poc中分配佈置了偽虛表的堆塊來佔位,通過js語句使reader呼叫imgstruct的虛表實現控制了EIP。然後利用就是換棧的堆噴了。最後附一張大牛寫的總結

 

相關文章