版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、10FuzzingFuzzingWindowsWindows驅(qū)動(dòng)驅(qū)動(dòng)對(duì)于對(duì)于hacker來(lái)說(shuō),攻擊來(lái)說(shuō),攻擊Windows驅(qū)動(dòng)程序已經(jīng)不再神秘。從前,驅(qū)動(dòng)程序常被遠(yuǎn)程溢出,而驅(qū)動(dòng)程序已經(jīng)不再神秘。從前,驅(qū)動(dòng)程序常被遠(yuǎn)程溢出,而如今驅(qū)動(dòng)漏洞越來(lái)越多的用于本地提權(quán)。在前面我們使用如今驅(qū)動(dòng)漏洞越來(lái)越多的用于本地提權(quán)。在前面我們使用Sulley找出了找出了WarFTPD的溢出漏洞的溢出漏洞。WarFTPD在遠(yuǎn)程的機(jī)器上由一個(gè)受限的用戶啟動(dòng),我們
2、在遠(yuǎn)程溢出它之后,就會(huì)獲得一個(gè)受限的權(quán)限,這個(gè)權(quán)限一般是很小的,如果似乎,很多信息都無(wú)法獲取,很多服務(wù)都訪問(wèn)不了。如果這時(shí)候我們擁有一個(gè)本地驅(qū)動(dòng)的exploit,那就能夠?qū)?quán)限提升到系統(tǒng)級(jí)別,youaregodnow!驅(qū)動(dòng)在內(nèi)核模式下運(yùn)行,而我們的程序在用戶模式下運(yùn)行,為了在兩種模式之間進(jìn)行交互,就要使用IOCTLs(inputoutputcontrols)。當(dāng)IOCTLs處理代碼有問(wèn)題的時(shí)候,我們就能利用它獲取系統(tǒng)權(quán)限。接下來(lái),我們首
3、先要介紹下如何通過(guò)實(shí)現(xiàn)IOCTLs來(lái)和本地的設(shè)備進(jìn)行聯(lián)系,并且嘗試使用Immunity變形IOCTLs數(shù)據(jù)。然后,學(xué)會(huì)使用Immunity提供的driverlib庫(kù)獲取驅(qū)動(dòng)信息,以及從一個(gè)編譯好的驅(qū)動(dòng)文件中解碼出重要的控制流程,設(shè)備名,和IOCTL代碼。最后用從drivelib獲得的數(shù)據(jù)構(gòu)建測(cè)試數(shù)據(jù),使用ioctlizer(我寫的一個(gè)驅(qū)動(dòng)fuzzer)進(jìn)行一次driverfuzz。10.1驅(qū)動(dòng)通信驅(qū)動(dòng)通信幾乎每個(gè)在Windows上注冊(cè)了
4、的驅(qū)動(dòng)程序都有一個(gè)設(shè)備名和一個(gè)符號(hào)鏈接。用戶模式的程序能夠通過(guò)符號(hào)鏈接獲得驅(qū)動(dòng)的句柄,然后使用這個(gè)句柄和驅(qū)動(dòng)進(jìn)行聯(lián)系。具體函數(shù)如下:HLEWINAPICreateFileW(LPCTSTRlpFileNameDWDdwDesiredAccessDWDdwShareModeLPSECURITY_ATTRIBUTESlpSecurityAttributeDWDdwCreationDispositionDWDdwFlagsAttributes
5、HLEhTemplateFile)第一個(gè)參數(shù),填寫文件名或者設(shè)備名,這里填寫目標(biāo)驅(qū)動(dòng)的符號(hào)連接。dwDesiredAccess表示訪問(wèn)方式,讀或者寫(可以既讀又寫,也可以不讀不寫),GENERIC_READ(0x80000000)讀,GENERIC_WRITE(0x40000000)寫。dwShareMode這里設(shè)置成0,表示在CreateFileW返回并且安全關(guān)閉了句柄之后,才能訪問(wèn)設(shè)備。lpSecurityAttributes設(shè)置成
6、NULL,表示使用默認(rèn)的安全描述符,并且不能被子進(jìn)程繼承。dwCreationDisposition參數(shù)設(shè)置成OPEN_EXISTING(0x3),表示如果設(shè)備存在就打開,其余情況返回錯(cuò)誤。最后兩個(gè)參數(shù)簡(jiǎn)單的設(shè)置成NULL。當(dāng)CreateFileW成功返回一個(gè)有效的句柄之后,我們就能使用DeviceIoControl(由kernel32.dll導(dǎo)出)傳遞一個(gè)IOCTL給設(shè)備。BOOLWINAPIDeviceIoControl(HLEhD
7、eviceDWDdwIoControlCodeLPVOIDlpInBufferDWDnInBufferSizeLPVOIDlpOutBufferDWDnOutBufferSizeLPDWDlpBytesReturnedLPOVERLAPPEDlpOverlapped)第一個(gè)參數(shù)由CreateFileW返回的句柄。dwIoControlCode是要傳遞給設(shè)備啟動(dòng)的IOCTL代碼。這個(gè)代碼決定了調(diào)用驅(qū)動(dòng)中的什么功能。參數(shù)lpInBuffer
8、指向一個(gè)緩沖區(qū),包含了將要傳遞給驅(qū)動(dòng)的數(shù)據(jù)。這個(gè)緩沖區(qū)是我們后面要重點(diǎn)操作的地方,fuzz數(shù)據(jù)將存在這。nInBufferSize為傳遞給驅(qū)動(dòng)的緩沖區(qū)的大小。lpOutBuffer和lpOutBufferSize,和前兩個(gè)參數(shù)一樣,不過(guò)是用于接收驅(qū)動(dòng)返回的數(shù)據(jù)。lpBytesReturned為驅(qū)動(dòng)實(shí)際返回的數(shù)據(jù)的長(zhǎng)度。最后一個(gè)參數(shù)簡(jiǎn)單的設(shè)置成NULL?,F(xiàn)在對(duì)于驅(qū)動(dòng)的交互,大家應(yīng)該不陌生了,接下來(lái)就祭出我們的Immunity,用它Hook
9、住DeviceIoControl然后變形輸入緩沖區(qū)內(nèi)的數(shù)據(jù),最后fuzzingeverydriver。10.2用Immunityfuzzing驅(qū)動(dòng)驅(qū)動(dòng)deviceiocontrol=imm.getAddress(“kernel32.DeviceIoControl“)ioctl_hooker=ioctl_hook()ioctl_hooker.add(“%08x“%deviceiocontroldeviceiocontrol)return“
10、[]IOCTLFuzzerReadyfAction!“這里沒(méi)有用到任何新的Immunity知識(shí),只是繼承了LogBpHook類,做了很小的擴(kuò)展,這一切都在第五章做了詳細(xì)的介紹。代碼非常清晰明了,顯示獲得傳遞給驅(qū)動(dòng)的IOCT代碼,輸入緩沖區(qū)長(zhǎng)度,輸入緩沖區(qū)位置。接著通過(guò)對(duì)輸入數(shù)據(jù)的變形,創(chuàng)建一個(gè)包含了隨即字符的新緩沖區(qū),長(zhǎng)度和輸入緩沖區(qū)一樣。之后將新緩沖區(qū)的數(shù)據(jù)寫入原緩沖區(qū),保存測(cè)試樣例。最后把控制權(quán)交還給用戶程序。記得把ioctl_fu
11、zzer.py放到PyComms目錄下。這樣我們就能使用ioctl_fuzzer命令fuzz任何使用IOCTLs了的程序(嗅探器,防火墻,或者殺毒軟件)。表101是Wireshark的fuzz結(jié)果。IOCTLCode:0x00120003BufferSize:36iginalBuffer:0000000000000000000100000001000000000000000000000000000000000000MutatedBuff
12、er:a4100338ff334753457078100f78bde62cdc872747482a51375db5aa2255c46eIOCTLCode:0x00001ef0BufferSize:4iginalBuffer:28010000MutatedBuffer:ab12d7e6Listing101:Wireshark的fuzzing輸出輸出在我們將一大堆的垃圾扔給驅(qū)動(dòng)器之后,在于發(fā)現(xiàn)了兩個(gè)可用的IOCTL代碼0x00001ef0和
13、0x0012003。如果要繼續(xù)測(cè)試,就必須不斷的和用戶模式下的Wireshark進(jìn)行交互,這樣Wireshark就會(huì)調(diào)用不同IOCTL代碼,最后祈禱上帝讓其中一個(gè)IOCTL處理代碼發(fā)生崩潰。雖然這樣做很簡(jiǎn)單,也確實(shí)很夠找出漏洞。不過(guò)還是不夠聰明。舉個(gè)例子,我們并不知道正在fuzzing的設(shè)備名,(不過(guò)可以通過(guò)hookCreateFileW,然后觀察被DeviceIoControl使用了的句柄,從而逆推得到設(shè)備名),而且fuzz的IOCT
14、L代碼并不全,我們?cè)谟脩裟J较聦?duì)程序進(jìn)行的操作是有限的,這樣程序?qū)︱?qū)動(dòng)功能的調(diào)用也是有限的。這就像碰運(yùn)氣。我們期待的是一個(gè)更加聰明的fuzzer,它能對(duì)所有的IOCTL不間斷的fuzzing,直到你的硬盤報(bào)銷,或者在這之前發(fā)現(xiàn)一個(gè)漏洞。這可能嗎,可能,先從我們偉大的Immunity攜帶的driverlib庫(kù)開始。使用driverlib我們能枚舉出驅(qū)動(dòng)程序所有的設(shè)備名和IOCTL代碼。把這些結(jié)合起來(lái)就能夠?qū)崿F(xiàn)一個(gè)高效,獨(dú)立,全自動(dòng)化的fu
15、zzer了,這是一個(gè)偉大的進(jìn)步,解放雙手,不做野蠻人。Let’sgetcracking。10.3.1找出設(shè)備名找出設(shè)備名用Immunity內(nèi)建的driverlib庫(kù)找出設(shè)備名很就當(dāng)。讓我們看看driverlib是怎么實(shí)現(xiàn)這個(gè)功能的。defgetDeviceNames(self):string_list=self.imm.getReferencedStrings(self.module.getCodebase())fentryinstri
16、ng_list:if“Device“inentry[2]:self.imm.log(“Possiblematchataddress:0x%08x“%entry[0]address=entry[0])self.deviceNames.append(entry[2].split(“““)[1])self.imm.log(“Possibledevicenames:%s“%self.deviceNames)returnself.deviceNa
17、mesListing102:driverlib庫(kù)找出設(shè)備名的方法庫(kù)找出設(shè)備名的方法代碼通過(guò)檢索驅(qū)動(dòng)中所有被引用了的字符串,找出其中包含了“Device“的項(xiàng)。這項(xiàng)就可能是驅(qū)動(dòng)程序注冊(cè)了的符號(hào)鏈接,用來(lái)讓用戶模式下的程序調(diào)用的。我們就使用C:WINDOWSSystem32beep.sys測(cè)試以下看看。以下操作都在Immunity中進(jìn)行。ImmunityDebuggerPythonShellv0.1Immlibinstanciatedasi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精致西歐輕奢之旅10天
- 10孤獨(dú)之旅---導(dǎo)學(xué)案配答案
- python題庫(kù)
- python題庫(kù)
- 強(qiáng)大的python--完全用python工作
- 神奇的探險(xiǎn)之旅作文450字10篇
- 愛(ài)心之旅 生命之旅
- python教案
- python試卷
- 經(jīng)典python面試題之python基礎(chǔ)篇
- python教程
- 神奇的探險(xiǎn)之旅作文500字精選10篇
- using openstreetmap data with python 使用python的openstrutemap數(shù)據(jù)
- python習(xí)題選編
- python continue 語(yǔ)句
- 中國(guó)廣義灰帽薹草組(莎草科)系統(tǒng)分類學(xué)研究.pdf
- python新手教程
- python 條件語(yǔ)句
- python語(yǔ)言基礎(chǔ)
- python 字典(dictionary)
評(píng)論
0/150
提交評(píng)論