漏洞丨cve2017-11882

作者:黑蛋
一、漏洞簡介
本次漏洞還是一個office溢出漏洞,漏洞編號cve-2017-11882。該漏洞是office一個組件EQNEDT32.EXE引起的棧溢出,通殺office版本2007-2016。
二、復(fù)現(xiàn)環(huán)境
系統(tǒng)版本
目標(biāo)程序
調(diào)試工具
輔助工具
win7 sp1 x86
office2007
olldbg
Process-Monitor
三、漏洞復(fù)現(xiàn)
在這里呢,我是使用了Ridter師傅的exp進(jìn)行分析的,網(wǎng)址:https://github.com/Ridter/CVE-2017-11882/
之后我們安裝office2007,然后雙擊EXP,彈出計算器:
證明漏洞存在。
四、漏洞分析
首先我們需要找到溢出點,既然他彈出一個計算器,那么我們可以對CreateProcess函數(shù)或者WinExec下斷點,嘗試找到關(guān)鍵地方,用windbg附加office 2007,然后在CreateProcess函數(shù)和WinExec函數(shù)下斷點:
然后g起來,用word打開exp:
結(jié)果發(fā)現(xiàn)并沒有斷下來,思考許久,猜測計算器不是word彈出來的,我們打開PCHunter查看進(jìn)程:
可以看到計算器的父進(jìn)程是cmd,但是cmd的父進(jìn)程存在PID,但是在列表中卻找不到PID為1404的進(jìn)程,卡頓許久,猜測或許是cmd父進(jìn)程隱藏了自己或者啟動時間太短,啟動完自己結(jié)束。想起了一個老軟件Process-Monitor,使用Process-Monitor查看進(jìn)程:
同樣沒有,這里我們需要開啟Process-Monitor,然后再次用word打開exp:
現(xiàn)在可以很清晰看到cmd父進(jìn)程是EQNEDT32.exe,以及他的路徑。所以我們需要在EQNEDT32.exe中下斷點,而不是word里面下斷點。在這里我們需要設(shè)置一下注冊表,因為EQNEDT32.exe這個程序是被word帶起來的,而他又會很快的結(jié)束,所以需要設(shè)置此程序啟動就被附加:
HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS
這樣,我們就完成了EQNEDT32.exe這個程序啟動附加。接下來我們雙擊exp,olldbg成功附加EQNEDT32.exe,首先在對WinExce下斷點,Ctrl+g(WinExec),然后在首部下斷點:
go起來,成功停在斷點處,說明計算器就是通過WinExce啟動的,F(xiàn)8單步走過函數(shù)初始化過程,開辟??臻g等步驟,然后我們觀察堆棧EBP+4的位置,就是函數(shù)返回地址:
跟進(jìn)返回地址,可以看到這里調(diào)用了WinExec函數(shù):
我們在call WinExec函數(shù)前面一句,以及call這條語句下斷點:
然后關(guān)閉word,重新雙擊exp,然后在OD中運行起來:
可以看到他停在了call這條語句,并沒有執(zhí)行push eax,在這里我們可以判斷出應(yīng)該是上個函數(shù)返回值直接跳到了WinExec上,我們查找堆棧,向高地址查找,可以看到上個函數(shù)返回地址:
在堆棧+40的位置回車跟到上一層函數(shù):
在此地點上方call函數(shù)下斷點,然后重新運行,卡在斷點處:
我們F7跟進(jìn)去單步調(diào)試,看看哪里覆蓋了返回地址,我們注意F7進(jìn)去的第一個call:
首先給他下個斷點,預(yù)防他是關(guān)鍵函數(shù),然后再F8:
可以看到這里就是關(guān)鍵函數(shù),剛走過這個函數(shù)就斷在了WinExec函數(shù)上,我們重新調(diào)試,讓斷在剛才下的斷點上,F(xiàn)7跟進(jìn)去調(diào)試:
首先鎖定堆棧返回地址,看看什么時候會被淹沒,在這里我們已經(jīng)找到關(guān)鍵地方,一串cmd字符,以及拷貝代碼:
我們執(zhí)行到返回,可以看到cmd這一串的地址正好是WinExec函數(shù)第一個參數(shù):
也就是這里是通過淹沒返回地址到WinExec上,然后通過修改字符串控制WinExec的參數(shù),啟動cmd打開計算器實現(xiàn)。通過啟動cmd,打開了計算器,而之后的的AAAA等都是傳給計算器參數(shù),是無效的。我們可以在cmd測試一下:
五、exp簡單生成
我們修改一下exp:
然后用010Editor打exp,找到cmd這串字符,修改為彈出截屏框:
接下來我們?nèi)∠麛帱c測試一下:
彈出了剪切屏,漏洞復(fù)現(xiàn)利用成功。