91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

發布時間:2021-12-24 21:38:42 來源:億速云 閱讀:153 作者:柒染 欄目:安全技術

這篇文章給大家介紹怎么進行Office Open XML wwlib模塊解析混淆漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、前言

CVE-2017-11826 據說是 360 在 2017 年 9 月底發現的一個關于 XML 格式解析的一個漏洞,之后微軟在 10 月份發布了關于 CVE-2017-11826 的補丁。該漏洞的成因是由于在解析閉合元素時,沒有對元素的完整性做出判斷,導致將當前元素的嵌套關系加上 1。這樣的話 wwlib 模塊在處理閉合標簽時,會錯誤的使用父級元素 w:name 屬性 +44 的地址進行虛函數調用,攻擊者通過修改 w:name 屬性,就可以進行任意地址調用。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

受影響的 Office 版本。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

二、調試環境

操作系統:Windows 7 + VMware

調試工具:x64dbg

漏洞樣本:POC

補丁地址:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11826

三、調試分析

從 GitHub 上下載關于 CVE-2017-11826 漏洞的文件夾,解壓后發現包括解壓過的 docx 文件、README 文件、俄文文檔,俄文文檔沒有仔細看,好像是關于漏洞利用的。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

包含漏洞的 XML 文件為 document.xml,文件在 `word` 路徑下。打開 document.xml 文件,分析后發現 <w:font> 標簽使用了 </o:idmap> 標簽進行閉合,而 <w:font> 標簽的 w:name 屬性有點奇怪,可能是用于控制某一個地址的值。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

將解壓過的 docx文檔重新壓縮,之后使用注冊表附加調試器準備調試。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

附加完成之后打開含有漏洞的文檔,運行后觸發異常,其中 call [ecx+4] 指令是利用虛函數表調用虛函數,而 ecx 為虛函數表指針,通過 wwlib.41249DA0 函數返回。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

查看堆棧調用,發現用于處理 XML 格式的 msxml 模塊,msxml 模塊通過間接調用 wwlib 模塊去協助解析 XML 格式。暫且將 wwlib.3161309E 函數定為漏洞函數。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

對漏洞函數下記錄斷點后查看日志內容,發現漏洞函數被調用了 6 次,結合 document.xml 文件中的標簽元素分析漏洞函數很有可能是用于解析元素標簽的,至于解析的是什么,目前還不清楚。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

選取最后一次調用漏洞函數的 esp 下條件斷點,分析漏洞函數處理流程。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

函數斷下后從傳入的參數可以發現,esi 可能是儲存標簽信息的數據結構。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

單步進入該函數,在如圖所示的位置會取出元素的嵌套關系,此時 <o:idmap> 標簽已經插到了 <w:font> 標簽的后面(以 ":" 符號為分隔符)。而 <w:font> 標簽在未閉合的情況插入了 <o:idmap> 標簽,說明嵌套關系已經被錯誤的解析。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

調試到 0x31613084 地址時發現會調用 wwlib.31249DA0 函數,經過分析后發現該函數的返回值和異常處的虛函數表調用有關,所以進入這個函數看看。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

通過分析發現該函數對 ecx 和 edx 做了一些簡單的計算,算法為[[ecx]+8]*edx + [[ecx]+C] + [ecx],計算結果為 0x0751D140;而 ecx 是由 esi 傳入,edx 又等于[[esi]],所以算法變為[[esi]+8]*([[esi]]-2) + [[esi]+C] + [esi],由傳入的 esi 控制,經過后面的分析可以得出[[esi]]其實就是當前元素的嵌套等級。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

調用完 wwlib.31249DA0 后會將[[0x0751D140+44]+44]地址的值作為虛函數表指針進行虛函數調用,進而觸發異常。如圖所示可以看出[0x0751D140+44]地址被覆蓋成了 <w:font> 元素的 w:name 屬性,所以攻擊者通過修改 <w:font> 標簽的 w:name 屬性就可以做到調用任意地址。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

接下來更改樣本中的 document.xml 文件,手動添加 </w:font> 閉合標簽,看看是否會觸發異常。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

在漏洞函數處斷下,這時的嵌套等級為 5。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

之后通過 wwlib.31249DA0 計算虛函數調用地址為 0x075098F4。由于嵌套等級為 5,所以計算出的結果為 F4(4C*(5 - 2) + 10),之前的為 140(4C*(6 - 2) + 10)。由于嵌套等級由 5 變為 6,導致計算結果出現偏差。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

虛函數調用后程序并沒有觸發異常。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

四、分析 msxml 模塊處理步驟

為了快速了解 msxml 模塊的處理流程,對調用堆棧中的所有 msxml 模塊函數下記錄斷點,查看日志。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

從日志中可以發現漏洞函數的調用都是通過 sub_78887830 函數中的 call [ebx+200] 的指令實現的,但是倒數第二個漏洞函數的調用卻沒有經過 call [ebx+200] 而是直接跳到了 MSO 模塊。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

對倒數第二個漏洞函數下斷點。斷下后分析堆棧調用,發現 msxml.78887830 函數中的 call [ecx+20] 的指令也會調用漏洞函數。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

這樣的話函數調用流程圖就能分析出來了,函數調用流程如下圖所示:

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

下面根據 msxml.78887830 函數的最后一次調用,簡單分析 call [ebx+200] 下的函數鏈調用。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

在 msxml.78887830 函數開頭會將元素標簽對象儲存在 ebx 中,元素標簽對象儲存當前解析元素的信息,主要是元素的嵌套關系,嵌套等級等。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

向下調試后發現 msxml.788872F7 函數會獲取 <w:font> 元素的 w:name 屬性字符的指針。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

而下面的 msxml.78887335 函數會獲取 o:idmap 元素字符的指針

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

獲取完 o:idmap 元素字符的指針后,調用 msxml.788872F7 函數解析 o:idmap 元素,在內存窗口可以看出字符指針已經指向了 incer 的位置,說明已經把 idmap 標簽解析出來了。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

之后調用 msxml.788873F0 計算元素的嵌套等級,可以看出元素的嵌套等級計算出為 6,但此時元素的嵌套等級依舊是 5,還沒有更新為 6。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

在將 [ebx+1e8] 賦值給 eax 之后,發生了跳轉,從而跳過了 call [ecx+20] 的調用轉而進行 call [ebx+200] 的調用。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

調用的函數為 mso.32751CAA,其實 MSO 模塊的函數調用沒有太大的作用,只是給后面 wwlib 模塊的做間接處理。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

到達 0x32751D5C 的位置后執行 call [ecx+20] 指令調用 sub_3277FAC0 函數,此時 esi = [esi+60]。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

接著 sub_3277FAC0 函數中會執行 call [eax+10] 指令調用 wwlib.3127D3FB。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

進入 wwlib.3127D3FB 函數之后繼續向下調試,此時 [[esi+b14]] 的地址中儲存著元素的嵌套關系。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

之后調用完 wwlib.3127E6B3 函數后會進行一個判斷,如果 ebx 等于 0x80004001 就跳轉。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

跳轉完成之后調用漏洞函數,下面的流程剛剛已經分析過了。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

根據上面調試分析的結果對其中幾個位置下記錄斷點。查看日志可以發現 msxml.78887830 函數會逐一對元素進行解析,當解析到 <idmap> 標簽時嵌套關系為 5。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

但是在異常處嵌套關系為 6,對最后一次調用 msxml.78887830 函數下斷點,查看嵌套關系是何時變為 6 的。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

重新運行后斷下,此時嵌套關系為 5。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

當調試到 wwlib.3127D3FB 函數中的 0x3128E3AD 位置時,嵌套等級變為了 6,說明 wwlib.312C6142 函數更新了嵌套等級。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

接著分析一下 w:name 屬性是何時被復制的。通過對漏洞異常處的分析發現 w:name 屬性儲存在元素對象中,通過對元素對象儲存 w:name 位置下寫入斷點發現在 WWLIB.sub_3127D3FB 函數中會調用 wwlib.3127E773 函數復制 w:name 到元素對象當中,之后漏洞函數中會把 w:name 屬性取出來進行虛函數表調用。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

需要注意的是再上面的分析中該跳轉并沒有實現,也就是說這里在復制完 w:name 屬性之后直接返回了。而判斷跳轉的值是由 wwlib.3127E6B3 返回的,進入該函數,分析后發現在函數末尾處會將 0x80004001 賦值給 eax,在這之前會以 0x3149BFA3 作為基址,以 eax * 4 做為偏移地址進行調用,而 eax 是通過 [ebp-1c] 傳進來的,對該位置下記錄斷點后查看日志。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

根據日志可以發現當 [ebp+1c] 的值為 0xFFFF 時才會調用漏洞函數。而且解析 <w:font> 標簽前調用一次,解析 <o:idmap> 標簽后調用一次。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

之后把 <o:idmap> 標簽刪除,再對比日志信息。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

可以發現只有在 <w:font> 標簽解析前才會將此值設置為 0xFFFF,所以這一個值可能是用于判斷元素是否閉合。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

最后總結得出 msxml.78887830 處理標簽元素的流程。當 msxml.78887830 函數解析到 <w:font> 標簽時,會誤以為標簽已經閉合(跳轉值:0xFFFF),從而將 <o:idmap> 標簽插入到 <w:font> 標簽后,接著會把 <w:font> 標簽的 w:name 屬性(假如有的話)添加到對象之中,同時更新元素的嵌套關系(嵌套關系變為 6),導致最后使用 call [ecx+4] 進行虛函數表調用時虛表指針被錯誤的覆蓋成了    w:name 屬性中的數據觸發了異常。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

一些關鍵的數據及函數調用。

怎么進行Office Open XML wwlib模塊解析混淆漏洞分析

關于怎么進行Office Open XML wwlib模塊解析混淆漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浙江省| 靖江市| 宁海县| 塔城市| 育儿| 花莲市| 前郭尔| 康保县| 阿克陶县| 遵义市| 广东省| 海门市| 剑川县| 波密县| 柘荣县| 东兴市| 定西市| 安阳市| 陈巴尔虎旗| 汉阴县| 贺州市| 溧阳市| 九江市| 宿松县| 开平市| 黑水县| 左贡县| 呈贡县| 阆中市| 江津市| 濮阳市| 南昌县| 平定县| 本溪| 汝城县| 许昌市| 丹阳市| 江华| 博白县| 呼伦贝尔市| 彭阳县|