1. 程式人生 > >CVE-2018-4990 漏洞詳情分析

CVE-2018-4990 漏洞詳情分析

cve-2018-4990

測試版本:AcroRdrDC1700920044_en_US

漏洞模塊: Escript.api

漏洞函數

技術分享圖片

修復函數

技術分享圖片

問題分析

拷貝對象的時候把DWORD類型的對象地址作為BYTE類型進行了拷貝,堆對象拷貝溢出漏洞。對象偏移在0x50的地方,也就是錯誤的位置。

技術分享圖片

Javascript裏面噴射的對象代碼。

技術分享圖片

修復方案

定位到問題很好修復。

ROP技術

使用EScript.api模塊作為ROP執行地址,基址為69260000,ROP表如下.

  • 0D130064 692E2803 EScript.692E2803
  • 0D130068 692E2803 EScript.692E2803
  • 0D13006C 692E2802 EScript.692E2802
  • 0D130070 693F7084 <&KERNEL32.VirtualAlloc>
  • 0D130074 69271784 EScript.69271784
  • 0D130078 693EAF26 EScript.693EAF26
  • 0D13007C 69278000 EScript.69278000
  • 0D130080 69283AAA EScript.69283AAA
  • 0D130084 6936F282 EScript.6936F282
  • 0D130088 00010201
  • 0D13008C 692E2802 EScript.692E2802
  • 0D130090 692695C4 EScript.692695C4
  • 0D130094 77842FB6 kernel32.VirtualAlloc
  • 0D130098 69283AAA EScript.69283AAA

第一條ROP指令RETN在692E2803,為一條RETN指令。因為有ASLR保護,所以地址看起來不一樣。

技術分享圖片

ROP指令不進行一一講解,接下來通過ROP技術構造了一個函數VirtualAlloc分配一段內存。註意看下EAX寄存器的值。

技術分享圖片

EAX是0x90909090,adobe的javascript的堆噴射器裏面也有0x90909090。

技術分享圖片

使用VirtualAlloc函數申請了一段可讀可寫可執行的內存,大小為66049字節。為什麽呢?因為惡意pdf裏面還有個pe文件,shellcode應該帶有一個pe加載器,直接在本進程在內存執行pe文件。

技術分享圖片

接下來返回到了惡意內存中的shellcode繼續執行。註意一下,前面4字節是0x90。說明那個是填充的NOP指令。

技術分享圖片

Shellcode

第一個功能就是在shellcode長度(0x2710字節長度)後面搜索一個4字節的標記0xBFAFBFAF。搜索標記的作用是定位PE頭。

技術分享圖片

接下來用經典的fs:[0x30]技術定位kernel32的基址。

技術分享圖片

接下來通過解析PE文件搜索GetProcAddress函數的地址,這也是windows經典的shellcode技術。

技術分享圖片

使用GetProcAddress函數得到LoadLibraryA、VirtualAlloc、VirtualFree、VirtualProtect、GetModuleHandleA的地址

技術分享圖片

技術分享圖片

接著是PE加載器的經典功能,拷貝PE頭、修復區段、重定位、填充輸入表等等。

技術分享圖片

接著使用VirtualProtect函數改寫PE為可讀可執行可寫。

技術分享圖片

最後調用PE文件的入口函數,因為PE是dll所以入口是DllMain。

技術分享圖片

這個dll只有一個功能,使用MessageBoxA彈一個對話框。

技術分享圖片

Dll的入口函數。

技術分享圖片

完事收工。

原文地址:https://mozhe.cn/news/detail/294

CVE-2018-4990 漏洞詳情分析