軟件名稱:Microsoft Office
軟件版本:2003
漏洞模塊:MSCOMCTL.OCX
POC來源:Kail(Linux)Metasploit框架
操作系統:Windows 7\sp1\x86 32位
漏洞編號:CVE
0x01 漏洞原理
關於本漏洞原理,網上有各種分析文章,一般都基於實例樣本來定位漏洞的二進制代碼並分析原理,這裏不作詳細的分析過程,直接給出漏洞成因,後面也有少部分的調試演示。這個漏洞發生在office的一個組件MSCOMCTL.OCX,多個版本office的該模塊都存在這個漏洞,本文的測試環境均以WINDOWS+office2003爲例。MSCOMCTL.OCX這個漏洞模塊是office解析activeX控件用到的一個動態庫,如果一個office文檔中包含activeX這類控件元素的話,比如按鈕、列表、樹形控件等,當文檔通過office打開時MSCOMCTL.OCX就會被自動載入office程序的進程空間被調用來解析和顯示控件。
本漏洞屬於經典緩衝區溢出漏洞裏的棧內存拷貝溢出漏洞,當office解析到一個被構造好的控件(以ListView列表控件爲例),會發生棧內存越界拷貝。以下棧回溯示意圖可以代表本漏洞的發生過程:
0x02 漏洞成因
棧內存拷貝溢出漏洞,控件安全檢查不嚴
綜上可以得出漏洞成因是在讀取數據的時候,讀取的長度和驗證的長度都在文件中,且可以人爲修改,進而出發緩衝區溢出
0x03 利用過程
proc溢出點
eip被覆蓋成41414141
加載模塊
漏洞動態利用
ida動態分析
0x04 結果
用010edit寫,第一個是jmp esp地址,4個90是跳板(可能存在少了一個字節),解密shellcode,加密shelloce(要把DE改爲90與7異或==97),edit如圖10所示:
41414141(jmp esp )後面4個nop +shellcode起始位置
運行結果,彈出個MessageBox圖片,結果如圖11所示:
0x05 漏洞原理
要先準備一段加密的shellcode,解密shellcode,都要用vs編寫,用od摳出來,注意加密解密祕鑰要相同,shellcode的大小要一樣,找溢出點通過sublime_text這個工具切一半再精確,sublime_text這個要和虛擬機版本一樣,顏色深度代表裏面輸入的字符串不同。