天天看點

MS08-052 WMF漏洞分析及漏洞測試

  轉自: http://hi.baidu.com/antivirusboy/blog/item/d2c1970017687c17728b6589.html   一 背景知識

由檔案格式入手,來分析MS08-052漏洞, 并構造了一個可以使沒有更新檔的程式崩潰的圖檔,

1 WMF檔案結構

--------------------------|

|         檔案頭            |

|-------------------------|

|       檔案記錄          |

|-------------------------|

|-------------------------|

|       檔案記錄          |

|-------------------------|

|-------------------------|

|       檔案記錄         |

|-------------------------|

windows中檔案頭結構如下

typedef struct

{

    INT16           Left;

    INT16           Top;

    INT16           Right;

    INT16           Bottom;

} PWMFRect16;

typedef struct

{

    UINT32          Key;            // GDIP_WMF_PLACEABLEKEY

    INT16           Hmf;            // Metafile HANDLE number (always 0)

    PWMFRect16      BoundingBox;    // Coordinates in metafile units

    INT16           Inch;           // Number of metafile units per inch

    UINT32          Reserved;       // Reserved (always 0)

    INT16           Checksum;       // Checksum value for previous 10 WORDs

} WmfPlaceableFileHeader;

typedef struct tagMETAHEADER

{

    WORD        mtType;                  // 01 磁盤

    WORD        mtHeaderSize;            // 0x0009 頭大小9個word

    WORD        mtVersion;

    DWORD       mtSize;                  // 不算WmfPlaceableFileHeader頭的檔案大小

    WORD        mtNoObjects;

    DWORD       mtMaxRecord;

    WORD        mtNoParameters;

} METAHEADER;

MS08-052 WMF漏洞分析及漏洞測試

                                             圖 1.1 檔案頭

檔案記錄由 檔案記錄大小(4位元組) 檔案記錄類型(2位元組) 檔案記錄體組成,其中0x0538類型是polypolygon類型,正是對這個記錄的處理不當導緻的溢出, 該記錄的結構如下

記錄大小 

記錄類型

polygon個數(假設為x)    

第1個polygon的點數(y個)     第2個polygon點數 ....第x個polygon的點數   .

第1個polygon的第1個點    第1個polygon的第2個點....第1個polygon的第y個點

...............

第x個polygon的第1個點 .................................第x個polygon的最後1個點

由圖1.2看出該記錄的大小為0x73個word長度.   該記錄類型是0x0538 該記錄中polygon的個數為1 , polygon的點數為0x37, 後面0x37個word長度的資料就是該polygon的點. 想要讀取該記錄則要先配置設定空間,但并不是根據0x73來配置設定的,而是根據polygon的個數,及每個polygon的點數相加來配置設定空間.

MS08-052 WMF漏洞分析及漏洞測試

                                                           圖 1.2 polypolygon記錄

二 漏洞部分代碼

MS08-052 WMF漏洞分析及漏洞測試

                                                 圖2.1 具有漏洞的代碼

MS08-052 WMF漏洞分析及漏洞測試

                                                   圖2.2 微軟修補後的代碼

除了判斷是否小于0 還有判斷是否加過了溢出了

三 WMF檔案構造

構造了一個wmf檔案polypoygon記錄, 用極大的polygon個數和每個polygon的點數都很大, 使其計算達到整數溢出,使用沒有更新檔的gdiplus的程式檢視該檔案,就可以直接崩潰, , 測試圖檔連接配接 http://bbs.antiy.cn/viewthread.php?tid=1087&extra=page%3D1&frombbs=1            無木馬. 呵呵           無木馬. 呵呵

MS08-052 WMF漏洞分析及漏洞測試

四解決方案

有漏洞的趕快打更新檔吧 http://www.antiy.com/cn/download/agdifix.htm

五 總結

圖形檔案格式是由很多 “ 段 ” 構成的資料流,而每個段由 :長度, 類型 ,參數,資料等結構構成,在程式解析這些檔案格式的時候會依據 “類型 ” 來确認段,并讀取參數 ” 進行一定的運算,再依據這些參數來處理随後緊跟的 “ 資料 ” 。漏洞的産生原因就是在對參數進行運算的時候相信了檔案輸入的參數沒有進行确認而導緻的。除了圖形檔案格式外 excel 的 biff 格式也是一樣的由段的頭決定後續資料的讀取,且有可變資料對象。有輸入就有危險.

六 參考文獻

[1] GDI+ 中的漏洞可能允許遠端執行代碼 ( http://www.microsoft.com/china/technet/security/bulletin/MS08-052.mspx

[2] Microsoft GDI+ WMF PolyPolygon Record Parsing Integer Overflow http://secunia.com/binary_analysis/sample_analysis/ 2008

[3] Wmf http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/WindowsMetafileFormat(wmf)Specification.pdf 2008

繼續閱讀