[原創]CVE-2012-1535 Flash解析特殊格式字型漏洞樣本構造分享
仙果發表於2012-10-27
題記:
很早就想寫這麼一篇分享,分享自己在構造CVE-2012-1535這一Flash 漏洞樣本過程中所遇到的一些問題和總結的一些心得。
之前有 古河 和 Wingdbg 兩位大牛兩篇漏洞原理的分析文章,我這篇就不從漏洞原理上進行闡述分析,主要說的是自己在分析構造樣本過程中的一些思路和方法,都是一些很簡單粗淺的東西,大牛看到也莫怪,權當茶餘飯後的資料。
古河:【原創】cve-2012-1535漏洞除錯分析(附樣本) :
http://bbs.pediy.com/showthread.php?t=154860
Wingdbg:【原創】CVE-2012-1535 Flash漏洞除錯筆記
http://bbs.pediy.com/showthread.php?t=155101
看到了metazhou的一篇分析
【原創】Step by Step除錯CVE-2012-0158 POC
http://bbs.pediy.com/showthread.php?t=152407
與他們的文章結合起來就可以走完漏洞分析的過程,對從事漏洞分析有一定的幫助。最後容我發句牢騷:真心喜歡現在所從事的工作,祈求生活不要給我那麼大的壓力。
貌似我每次廢話都很多,現在開始正題:
分析環境:
Windows XP SP3 虛擬機器
010editor
Windbg
碩思閃客精靈
一 分析Flash Swf樣本
當拿到一個檔案格式方面的樣本時,自己的習慣不是去雙擊開啟它,而是使用010editor等十六進位制編輯工具開啟檔案,檢視檔案中是否有對分析有所幫助的資訊,或許能夠發現一些漏洞的蛛絲馬跡。這次就在十六進位制中發現了一些很奇妙的東西:
從以上2段資料中可以得到以下資訊:
1 Flash Swf檔案是由某一款Flash 開發工具生成的,比較流行的是Flash CS系列、Adobe Flash Builder系列、以及其他一些編輯器,碰到最多的就是Flash CS。
2 Flash Swf 是在2012年8月10號建立的,時間很近,這時一個好現象。
此時自己嘗試使用Flash Builder 4.6編譯一個預設的SWF檔案與樣本SWF進行比較,發現使用樣本並是由Flash Builder 生成的。
接著往下進行分析:
認真分析這段資料可以發現,樣本Swf檔案中嵌入了一個字型檔案,而且可以看到相關的關鍵字,如下:AdobeIdentityRexliaFree-RegularVersion 1.000Rexlia is a trademark of Typodermic FontsRexlia Free/OrigFontType /TrueType def
以"RexliaFree"為關鍵字開啟百度進行搜尋,前3條連結中的一個:
http://www.fontke.com/font/10226295/
其中版權資訊:© 2008 Typodermic Fonts. This font is freeware. Read attached text file for details. Check out the rest of the Rexlia family and the OpenType version at Typodermic: http://www.typodermic.com ,與樣本中如下資料相對應:
現在推斷這個字型檔案,就是嵌入到Flash 漏洞樣本中的字型檔案,有可能是Flash 解析字型時解析不正確導致的漏洞,果斷下載此字型檔案,同時也下載了其他連結的字型檔案,透過比較後發現為同一檔案,沒有區別。
再接著往下看:
這些資料很明顯就是漏洞觸發後定義的ShellCode了,對構造樣本來說關係不大,但對於漏洞除錯分析的話用處是非常大的,在這裡知道了ShellCode,可以在記憶體中有對應的斷點,然後分析。
二 還原構造初始樣本
現在回頭看看我們都知道什麼?
1 漏洞是由Flash Builder 編譯器生成的
2 疑似觸發漏洞的字型檔案:rexliafree.ttf
接下來該如何去做呢?
答案很簡單,嘗試去構造出一個簡單的能夠觸發漏洞樣本出來,這首先要面對一個問題,即如何把字型嵌入到Flash 當中,樣本是如何做的?
想知道這些就要嘗試針對樣本Swf進行反編譯處理,我用的是碩思,當然也可以用其他反編譯工具,效果是一樣的。
以下為反編譯程式碼片段:
為主函式程式碼,從層次結構上看很明顯:FontClass之後,堆填充,最終
TextBlock_createTextLineExample()函式觸發漏洞。
觸發函式程式碼如下:
從程式碼中可以看到觸發漏洞的流程,根據關鍵的幾個函式能夠證實確實是Flash解析字型時觸發的漏洞,問題又來了,憑藉this.FontClass = Main_FontClass;這一句程式碼,如何嵌入字型?否則如何觸發漏洞,而字型檔案又確實嵌入到了Flash Swf檔案中。
認真想了想這個問題,記得使用Flash Builder 使用AS3 進行Flash 開發時, Flex可以使用Embed嵌入圖片(image)、影片(movice)、Mp3等,有三種嵌入資源的方式可供選擇,語法如下:
摘自:《flex 關於Embed的應用 》
接著使用google搜尋以"as3 font"作為關鍵字,得到這麼一個網頁:
http://www.spikything.com/blog/index.php/2009/09/06/how-to-embed-fonts-in-pure-as3/
其中關鍵程式碼如下:
很早就想寫這麼一篇分享,分享自己在構造CVE-2012-1535這一Flash 漏洞樣本過程中所遇到的一些問題和總結的一些心得。
之前有 古河 和 Wingdbg 兩位大牛兩篇漏洞原理的分析文章,我這篇就不從漏洞原理上進行闡述分析,主要說的是自己在分析構造樣本過程中的一些思路和方法,都是一些很簡單粗淺的東西,大牛看到也莫怪,權當茶餘飯後的資料。
古河:【原創】cve-2012-1535漏洞除錯分析(附樣本) :
http://bbs.pediy.com/showthread.php?t=154860
Wingdbg:【原創】CVE-2012-1535 Flash漏洞除錯筆記
http://bbs.pediy.com/showthread.php?t=155101
看到了metazhou的一篇分析
【原創】Step by Step除錯CVE-2012-0158 POC
http://bbs.pediy.com/showthread.php?t=152407
與他們的文章結合起來就可以走完漏洞分析的過程,對從事漏洞分析有一定的幫助。最後容我發句牢騷:真心喜歡現在所從事的工作,祈求生活不要給我那麼大的壓力。
貌似我每次廢話都很多,現在開始正題:
分析環境:
Windows XP SP3 虛擬機器
010editor
Windbg
碩思閃客精靈
一 分析Flash Swf樣本
當拿到一個檔案格式方面的樣本時,自己的習慣不是去雙擊開啟它,而是使用010editor等十六進位制編輯工具開啟檔案,檢視檔案中是否有對分析有所幫助的資訊,或許能夠發現一些漏洞的蛛絲馬跡。這次就在十六進位制中發現了一些很奇妙的東西:
00D0h: 61 73 68 3C 2F 64 63 3A 66 6F 72 6D 61 74 3E 3C ash</dc:format>< 00E0h: 64 63 3A 74 69 74 6C 65 3E 41 64 6F 62 65 20 46 dc:title>Adobe F 00F0h: 6C 65 78 20 34 20 41 70 70 6C 69 63 61 74 69 6F lex 4 Applicatio 0100h: 6E 3C 2F 64 63 3A 74 69 74 6C 65 3E 3C 64 63 3A n</dc:title><dc: 0110h: 64 65 73 63 72 69 70 74 69 6F 6E 3E 68 74 74 70 description>http ….. 01B0h: 3C 64 63 3A 64 61 74 65 3E 41 75 67 20 31 30 2C <dc:date>Aug 10, 01C0h: 20 32 30 31 32 3C 2F 64 63 3A 64 61 74 65 3E 3C 2012</dc:date><
從以上2段資料中可以得到以下資訊:
1 Flash Swf檔案是由某一款Flash 開發工具生成的,比較流行的是Flash CS系列、Adobe Flash Builder系列、以及其他一些編輯器,碰到最多的就是Flash CS。
2 Flash Swf 是在2012年8月10號建立的,時間很近,這時一個好現象。
此時自己嘗試使用Flash Builder 4.6編譯一個預設的SWF檔案與樣本SWF進行比較,發現使用樣本並是由Flash Builder 生成的。
接著往下進行分析:
0380h: 00 56 00 00 00 61 00 00 00 7C 41 64 6F 62 65 49 .V...a...|AdobeI 0390h: 64 65 6E 74 69 74 79 52 65 78 6C 69 61 46 72 65 dentityRexliaFre 03A0h: 65 2D 52 65 67 75 6C 61 72 56 65 72 73 69 6F 6E e-RegularVersion 03B0h: 20 31 2E 30 30 30 52 65 78 6C 69 61 20 69 73 20 1.000Rexlia is 03C0h: 61 20 74 72 61 64 65 6D 61 72 6B 20 6F 66 20 54 a trademark of T 03D0h: 79 70 6F 64 65 72 6D 69 63 20 46 6F 6E 74 73 52 ypodermic FontsR 03E0h: 65 78 6C 69 61 20 46 72 65 65 2F 4F 72 69 67 46 exlia Free/OrigF 03F0h: 6F 6E 74 54 79 70 65 20 2F 54 72 75 65 54 79 70 ontType /TrueTyp 0400h: 65 20 64 65 66 00 CC 02 00 01 00 50 00 9F 00 A2 e def.?...P.??
認真分析這段資料可以發現,樣本Swf檔案中嵌入了一個字型檔案,而且可以看到相關的關鍵字,如下:AdobeIdentityRexliaFree-RegularVersion 1.000Rexlia is a trademark of Typodermic FontsRexlia Free/OrigFontType /TrueType def
以"RexliaFree"為關鍵字開啟百度進行搜尋,前3條連結中的一個:
http://www.fontke.com/font/10226295/
其中版權資訊:© 2008 Typodermic Fonts. This font is freeware. Read attached text file for details. Check out the rest of the Rexlia family and the OpenType version at Typodermic: http://www.typodermic.com ,與樣本中如下資料相對應:
C370h: C0 00 00 00 03 00 01 04 09 00 00 01 80 00 C0 28 ?..........€.? C380h: 63 29 20 32 30 30 38 20 54 79 70 6F 64 65 72 6D c) 2008 Typoderm C390h: 69 63 20 46 6F 6E 74 73 2E 20 54 68 69 73 20 66 ic Fonts. This f C3A0h: 6F 6E 74 20 69 73 20 66 72 65 65 77 61 72 65 2E ont is freeware. C3B0h: 20 52 65 61 64 20 61 74 74 61 63 68 65 64 20 74 Read attached t C3C0h: 65 78 74 20 66 69 6C 65 20 66 6F 72 20 64 65 74 ext file for det C3D0h: 61 69 6C 73 2E 20 43 68 65 63 6B 20 6F 75 74 20 ails. Check out C3E0h: 74 68 65 20 72 65 73 74 20 6F 66 20 74 68 65 20 the rest of the C3F0h: 52 65 78 6C 69 61 20 66 61 6D 69 6C 79 20 61 6E Rexlia family an C400h: 64 20 74 68 65 20 4F 70 65 6E 54 79 70 65 20 76 d the OpenType v C410h: 65 72 73 69 6F 6E 20 61 74 20 54 79 70 6F 64 65 ersion at Typode C420h: 72 6D 69 63 3A 20 68 74 74 70 3A 2F 2F 77 77 77 rmic: http://www C430h: 2E 74 79 70 6F 64 65 72 6D 69 63 2E 63 6F 6D 00 .typodermic.com.
現在推斷這個字型檔案,就是嵌入到Flash 漏洞樣本中的字型檔案,有可能是Flash 解析字型時解析不正確導致的漏洞,果斷下載此字型檔案,同時也下載了其他連結的字型檔案,透過比較後發現為同一檔案,沒有區別。
再接著往下看:
C820h: 49 41 4E 06 65 6E 64 69 61 6E 22 30 63 30 63 30 IAN.endian"0c0c0 C830h: 63 30 63 30 63 30 63 30 63 30 63 30 63 30 63 30 c0c0c0c0c0c0c0c0 C840h: 63 30 63 30 63 30 63 39 30 39 30 39 30 88 12 39 c0c0c0c909090?9 C850h: 30 39 30 39 30 39 30 39 30 45 39 34 37 30 31 30 090909090E947010 C860h: 30 30 30 43 32 38 46 33 36 44 38 41 30 44 46 31 000C28F36D8A0DF1 C870h: 36 44 35 42 35 46 30 44 45 37 38 44 30 30 35 38 6D5B5F0DE78D0058
這些資料很明顯就是漏洞觸發後定義的ShellCode了,對構造樣本來說關係不大,但對於漏洞除錯分析的話用處是非常大的,在這裡知道了ShellCode,可以在記憶體中有對應的斷點,然後分析。
二 還原構造初始樣本
現在回頭看看我們都知道什麼?
1 漏洞是由Flash Builder 編譯器生成的
2 疑似觸發漏洞的字型檔案:rexliafree.ttf
接下來該如何去做呢?
答案很簡單,嘗試去構造出一個簡單的能夠觸發漏洞樣本出來,這首先要面對一個問題,即如何把字型嵌入到Flash 當中,樣本是如何做的?
想知道這些就要嘗試針對樣本Swf進行反編譯處理,我用的是碩思,當然也可以用其他反編譯工具,效果是一樣的。
以下為反編譯程式碼片段:
public function Main() : void { this.FontClass = Main_FontClass; this.heapSpray(); this.TextBlock_createTextLineExample(); return; }// end function
為主函式程式碼,從層次結構上看很明顯:FontClass之後,堆填充,最終
TextBlock_createTextLineExample()函式觸發漏洞。
觸發函式程式碼如下:
public function TextBlock_createTextLineExample() : void { var _loc_1:String = "Edit the world in hex."; var _loc_2:* = new FontDescription("PSpop"); _loc_2.fontLookup = FontLookup.EMBEDDED_CFF; var _loc_3:* = new ElementFormat(_loc_2); _loc_3.fontSize = 16; var _loc_4:* = new TextElement(_loc_1, _loc_3); var _loc_5:* = new TextBlock(); new TextBlock().content = _loc_4; this.createLines(_loc_5); return; }// end function private function createLines(param1:TextBlock) : void { var _loc_2:Number = 300; var _loc_3:Number = 15; var _loc_4:Number = 20; var _loc_5:* = param1.createTextLine(null, _loc_2); while (_loc_5) { _loc_5.x = _loc_3; _loc_5.y = _loc_4; _loc_4 = _loc_4 + (_loc_5.height + 2); addChild(_loc_5); _loc_5 = param1.createTextLine(_loc_5, _loc_2); } return; }// end function
從程式碼中可以看到觸發漏洞的流程,根據關鍵的幾個函式能夠證實確實是Flash解析字型時觸發的漏洞,問題又來了,憑藉this.FontClass = Main_FontClass;這一句程式碼,如何嵌入字型?否則如何觸發漏洞,而字型檔案又確實嵌入到了Flash Swf檔案中。
認真想了想這個問題,記得使用Flash Builder 使用AS3 進行Flash 開發時, Flex可以使用Embed嵌入圖片(image)、影片(movice)、Mp3等,有三種嵌入資源的方式可供選擇,語法如下:
[Embed(parameter1,parameter2,...)] 後設資料
摘自:《flex 關於Embed的應用 》
接著使用google搜尋以"as3 font"作為關鍵字,得到這麼一個網頁:
http://www.spikything.com/blog/index.php/2009/09/06/how-to-embed-fonts-in-pure-as3/
其中關鍵程式碼如下:
[Embed(source = '../fonts/myfont.ttf', fontName = 'MY_FONT', fontWeight = 'regular', unicodeRange = 'U+000-
相關文章
- [原創]CVE-2013-2251 Apache Struts 2 高危漏洞重現構造及漏洞原理分析2013-07-19Apache
- AnglerEK的Flash樣本解密方法初探2020-08-19解密
- [原創]千年等一回-Adobe Reader CoolType庫TTF字型解析棧溢位漏洞分析2010-10-10
- 某EXCEL漏洞樣本shellcode分析2020-08-19Excel
- 用函式索引構造特殊的約束2019-07-03函式索引
- 【原創】OllyMachine
Script之Dump易格式原體2015-11-15Mac
- [原創]■■易格式初步研究筆記■■2004-11-01筆記
- 【開源樣本庫分享】Five-Billion-Pixels-ENVIFormat 五十億畫素高精度樣本庫分享2024-06-14ORM
- json格式構成深度解析2017-02-02JSON
- [原創] KCP 原始碼解析(下)2024-03-15原始碼
- [原創]簡單分析暴風影音讀取m3u格式檔案漏洞(0day)2010-05-09
- 課本上的創造力的相關知識2020-11-30
- 如何全面解析資料並創造資料故事2019-05-05
- 如何在Mac字型中訪問特殊字元2020-08-05Mac字元
- 在現在化前端中使用特殊字型2018-11-19前端
- 教大家如何在html中使用特殊字型2020-11-10HTML
- css字型樣式2024-03-21CSS
- 【原創】xenomai核心解析--實時IPC概述2020-10-01AI
- 【原創】ORACLE 深入解析10053事件2017-06-16Oracle事件
- Voodoo案例講解:跑酷遊戲型別解析與創新重構方法分享2020-11-24Odoo遊戲型別
- 怎樣才能為青年創造良好就業機會?2023-11-14就業
- (原創)IconFont(向量圖示字型)在Winform中的應用2021-04-13ORM
- Flash builder 除錯技巧 (分享)2013-08-27UI除錯
- 怎樣成為圖靈的原創作者2013-04-03圖靈
- AWS助理架構師樣題解析2014-10-22架構
- 【原創】OllyMachine
Script之易格式程式碼“直奔主題”2015-11-15Mac
- 寫一個“特殊”的查詢構造器 – (二、第一條語句)2019-02-16
- 寫一個“特殊”的查詢構造器 – (七、DML 語句、事務)2019-02-16
- 【原創】MySQLProxy-內部結構2016-05-11MySql
- 遊戲出海,怎樣創造爆量的視訊廣告素材?2020-07-14遊戲
- 創造簡約視覺風格的 3 個原則2019-04-30視覺
- 解析OpenSSL漏洞2014-04-09
- [原創]解讀天書----漏洞利用中級技巧的分析2014-02-19
- 【原創】Oracle execute plan 原理分析與例項分享2012-12-13Oracle
- 知產保護創造新價值 阿里發起中國首屆原創力量設計大賽助推原創經濟2020-03-24阿里
- 【原創】ORACLE 資料分析和動態取樣2014-08-12Oracle
- 【原創】開源Math.NET基礎數學類庫使用(05)C#解析Delimited Formats資料格式2015-02-17C#MITORM
- 【原創】開源Math.NET基礎數學類庫使用(04)C#解析Matrix Marke資料格式2015-02-16C#