如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

本篇文章給大家分享的是有關(guān)如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)專注于日照企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。日照網(wǎng)站建設(shè)公司,為日照等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

一、背景介紹:

2018年5月微軟發(fā)布了針對(duì)Windows操作系統(tǒng)內(nèi)核組件漏洞(CVE-2018-8210)的補(bǔ)丁,該漏洞影響多個(gè)版本的操作系統(tǒng),成功利用漏洞可使得普通應(yīng)用程序以內(nèi)核權(quán)限執(zhí)行任意代碼。

筆者在6月對(duì)該漏洞進(jìn)行分析并發(fā)布了漏洞分析和漏洞利用文章(地址),文中同時(shí)附帶了一份提權(quán)工具,支持WinXP、Win2003、Win7、Win2008等系統(tǒng)。后有網(wǎng)友回帖表示在Win7 x86系統(tǒng)下該利用工具無效,經(jīng)調(diào)試確認(rèn)提權(quán)工具確實(shí)存在部分兼容性問題。本文將針對(duì)該問題進(jìn)行補(bǔ)充說明,解決存在的兼容性問題。

CVE-2018-8120為緩沖區(qū)溢出漏洞,可造成內(nèi)核任意地址寫入。 前文中漏洞利用工具通過觸發(fā)漏洞,對(duì)內(nèi)核服務(wù)函數(shù)指針表進(jìn)行修改,替換為一段修改當(dāng)前進(jìn)程Token的ShellCode地址。

二、 問題定位:

經(jīng)測(cè)試在Win7 x86確實(shí)無法實(shí)現(xiàn)提權(quán),現(xiàn)進(jìn)行問題定位。設(shè)置雙機(jī)調(diào)試內(nèi)核環(huán)境,在關(guān)鍵的位置設(shè)置斷點(diǎn),進(jìn)行調(diào)試確認(rèn)問題的原因。

漏洞利用工具調(diào)試

首先設(shè)置雙機(jī)調(diào)試環(huán)境,虛擬機(jī)安裝Win7 x86,真機(jī)安裝WinDbg進(jìn)行內(nèi)核調(diào)試,在win32k! SetImeInfoEx ()設(shè)置斷點(diǎn),查看提權(quán)工具是否可以成功調(diào)用漏洞函數(shù)。

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

確認(rèn)是可以成功調(diào)用SetImeInfoEx()的,通過IDA反匯編查看該版本的SetImeInfoEx()函數(shù)確認(rèn)漏洞存在。

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

在SetImeInfoEx()函數(shù)進(jìn)行單步跟蹤,確認(rèn)是否可以觸發(fā)漏洞

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

經(jīng)過單步跟蹤,發(fā)現(xiàn)可以觸發(fā)SetImeInfoEx()函數(shù)存在的緩沖區(qū)溢出漏洞,成功修改了指定的內(nèi)存數(shù)據(jù)。

漏洞利用工具通過覆蓋GDI內(nèi)核對(duì)象關(guān)鍵字段,實(shí)現(xiàn)任意內(nèi)核地址讀寫。繼續(xù)執(zhí)行漏洞利用工具,檢查是否成功修改內(nèi)核服務(wù)函數(shù)指針表HalDispatchTable。

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

進(jìn)一步進(jìn)行查看發(fā)現(xiàn),漏洞利用程序計(jì)算的HalDispatchTable內(nèi)存地址并不正確,導(dǎo)致漏洞利用程序沒有成功修改函數(shù)指針,提權(quán)ShellCode也就沒有得以執(zhí)行。

 NtQueryIntervalProfile()和HalDispatchTable

我們說明一下為什么修改HalDispatchTable后,可以執(zhí)行ShellCode。NtQueryIntervalProfile()是Ntdll.dll中導(dǎo)出的未公開的系統(tǒng)調(diào)用.它調(diào)用內(nèi)核可執(zhí)行程序ntosknl.exe導(dǎo)出的KeQueryIntervalProfile()函數(shù).如果我們反匯編這個(gè)函數(shù),可看到如下:

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

位于nt!HalDispatchTable+0x4地址上的函數(shù)會(huì)被KeQueryIntervalProfile()調(diào)用(看紅色方框).所以如果我們覆蓋那個(gè)地址上的指針-也就是說HalDispatchTable中的第二個(gè)指針-帶有我們ShellCode地址;然后我們調(diào)用函數(shù)NtQueryIntervalProfile(),將執(zhí)行我們的ShellCode。

三、解決問題:

前面已經(jīng)定位到問題,由于沒有正確的修改系統(tǒng)服務(wù)表的函數(shù)指針,導(dǎo)致提權(quán)的ShellCode沒有執(zhí)行。現(xiàn)在的問題是找出原先計(jì)算過程中為什么會(huì)出錯(cuò),導(dǎo)致沒有計(jì)算出正確的地址。

如何計(jì)算HalDispatchTable表地址

HalDispatchTable由NT內(nèi)核文件導(dǎo)出,獲取該表地址只需要通過GetProcAddress()搜索NT內(nèi)核文件導(dǎo)出表即可,不過該函數(shù)在用戶態(tài)下,無法對(duì)內(nèi)核模塊進(jìn)行搜索。

在我們的漏洞利用工具中,計(jì)算HalDispatchTable表主要是函數(shù)leakHal()函數(shù)完成的,下面看看該函數(shù)的流程:

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

該函數(shù)首先通過EnumDeviceDrivers()獲取到ntoskrnl.exe模塊的運(yùn)行時(shí)基址,之后在用戶態(tài)加載ntoskrnl.exe并搜索HalDispatchTable表的導(dǎo)出地址,程序使用真實(shí)導(dǎo)出地址減去模塊基地址,獲得了該表相對(duì)于模塊基地址的偏移值。最后使用第一步獲取的ntoskrnl.exe的運(yùn)行時(shí)基地址加上上面計(jì)算的偏移值,得出內(nèi)核中HalDispatchTable表的內(nèi)存地址。

NT內(nèi)核文件之ntoskrnl.exe

NT內(nèi)核文件是Windows的內(nèi)核關(guān)鍵組件,通常是指可執(zhí)行文件ntoskrnl.exe。但是微軟根據(jù)當(dāng)前CPU的核心數(shù)量以及PAE開啟狀態(tài),加載不同的內(nèi)核可執(zhí)行文件。

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

如上圖所示,系統(tǒng)根據(jù)當(dāng)前處理器的工作模式,加載不同的內(nèi)核文件。

解決方案

由于原先的代碼在計(jì)算HalDispatchTable表的時(shí)候,沒有考慮到微軟針對(duì)CPU設(shè)置加載不同版本內(nèi)核組件的問題,導(dǎo)致在部分系統(tǒng)上無法成功修改函數(shù)指針。

在代碼中加入檢測(cè)CPU設(shè)置的代碼,根據(jù)具體的設(shè)置,判斷內(nèi)核所加載的NT內(nèi)核組件,并計(jì)算HalDispatchTable的真實(shí)內(nèi)存地址即可。下面是補(bǔ)充的代碼:

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

在原先的leakHal()代碼加入了DeteckKernel()函數(shù), 該函數(shù)檢測(cè)CPU數(shù)量和PAE開啟狀況,返回系統(tǒng)可能加載的內(nèi)核組件名稱。后續(xù)程序按原定的流程,加載該內(nèi)核組件,獲取HalDispatchTable表的內(nèi)存地址并修改。

最后調(diào)用NtQueryIntervalProfile()函數(shù),我們的ShellCode將以內(nèi)核權(quán)限執(zhí)行,以替換Token的方式進(jìn)行提權(quán)。

如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)

以上就是如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文題目:如何進(jìn)行Windows提權(quán)工具兼容性BUG定位及修復(fù)
標(biāo)題網(wǎng)址:http://bm7419.com/article30/jddgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、建站公司、企業(yè)建站、手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司