CVE-2017-11882漏洞分析
文章目錄
- 分析環境
- 漏洞描述
- 漏洞成因
- 漏洞分析
- 獲取poc
- 復現漏洞
- 漏洞分析
- 定位漏洞模塊
- 定位漏洞函數
- 定位漏洞觸發點
- 解決方案
分析環境
- 環境 W7 x64 Office2013
- 工具 windbg IDA Pro
漏洞描述
CVE-2017-11882是微軟公布的一個遠程執行漏洞,通殺目前市面上的所有office版本及Windows操作系統(包括剛剛停止支持的Office 2007)。該漏洞的成因是EQNEDT32.EXE進程在讀入包含MathType的ole數據時,在拷貝公式字體名稱時沒有對名稱長度進行校驗,從而造成棧緩沖區溢出,是一個非常經典的棧溢出漏洞。上次出現這么典型的office棧溢出漏洞是著名的CVE-2012-0158。
漏洞成因
該漏洞出現在模塊EQNEDT32.EXE中, 該模塊為windows的公式編輯器。由于該模塊對于輸入的公式未做正確的處理,攻擊者可以通過刻意構造的數據內容覆蓋掉棧上的函數地址,從而劫持程序流程,執行任意命令
**模塊路徑:**C:\Program Files\Common Files\microsoft shared\EQUATION
文件信息
如圖可以發現,程序發布于2000年,編譯器使用VC++4.2
受漏洞影響的版本
- Office 365
- Microsoft Office 2000
- Microsoft Office 2003
- Microsoft Office 2007 Service Pack 3
- Microsoft Office 2010 Service Pack 2
- Microsoft Office 2013 Service Pack 1
- Microsoft Office 2016
漏洞分析
獲取poc
https://github.com/Ridter/CVE-2017-11882
復現漏洞
- 搭建漏洞環境(安裝Office 2003 sp3),執行漏洞poc
- 由于漏洞出現在EQNEDT32.EXE 進程 首先需要確認是否存在公式編輯器
- 菜單->插入->對象 找到公式3.0
- 如果沒有則說明Office安裝不完全
- 打開exploit.rtf,彈出計算器
漏洞分析
定位漏洞模塊
通過ProcessMonitor查看計算器的父進程,發現是EQNEDT32.EXE,且EQNEDT32.EXE并不會作為WINWORD的子進程創建,而是以單獨的形式存在。這就意味著Office的進程保護機制,無法阻止EQNEDT32.EXE這個進程被利用。
定位漏洞函數
因為彈出計算器的時候創建了新進程,所以我們可以認為是由WinExec或者CreateProcess創建的。用windbg附加EQNEDT32.EXE,然后下API斷點
打開poc,程序斷下,分析WinExec的返回地址和參數
接著查看一下參數的內容
看到了通過cmd命令來開啟計算器
接著查看一下當前的調用堆棧,看是誰調用了WinExec這個函數
接著用ub命令查看這個返回地址之前的匯編代碼,然后在IDA中查看這些函數
在IDA中找到sub_4115A7這個函數,進去F5查看
只有這么一小段代碼,繼續跟進查看sub_41160F
這里的字符串拷貝函數沒有使用安全版本的,會導致棧溢出,那么這個函數就是觸發漏洞的函數了
定位漏洞觸發點
重新運行windbg,在0x4115D3這個觸發漏洞的函數下斷點
此時程序斷下
查看堆棧的參數,參數的內容就是poc中構造的惡意參數
接著進入函數,一直單步到這一條rep指令
此時我們查看ebp+4的內容和edi以及esi的內容,這里可以看到返回地址即將被0x430c12這個地址覆蓋
步過這條指令,再次查看ebp+4的內容,發現此時返回地址已經被覆蓋,這樣我們就確定了漏洞觸發點
解決方案
微軟已經對此漏洞做出了修復
- 下載https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882 更新補丁進行修補
- 開啟Windows Update功能,定期對系統進行自動更新
由于該公式編輯器已經17年未做更新,可能存在大量安全漏洞,建議在注冊表中取消該模塊的注冊
- 按下Win+R組合鍵,打開cmd.exe
- 輸入以下兩條命令:
總結
以上是生活随笔為你收集整理的CVE-2017-11882漏洞分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVE-2012-0158栈溢出漏洞分析
- 下一篇: WeTool逆向:借用别人的成果 打造自