版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)名稱:RPCDCOM堆棧溢出實(shí)驗(yàn)實(shí)驗(yàn)要求:[實(shí)驗(yàn)?zāi)康模萘私舛褩>彌_區(qū)溢出的基本原理及其危害。?體會(huì)遠(yuǎn)程緩沖區(qū)溢出的常見攻擊手法。樹立安全編程的思想,從根本上杜絕緩沖區(qū)溢出的發(fā)生。[實(shí)驗(yàn)環(huán)境]網(wǎng)絡(luò):局域網(wǎng)環(huán)境。遠(yuǎn)程計(jì)算機(jī)操作系統(tǒng):Windows2000Server?補(bǔ)?。篭組件:\?服務(wù):\本地計(jì)算機(jī)操作系統(tǒng):Windows2000主機(jī)軟件:DCOMRPCExploit-GUIv2。[實(shí)驗(yàn)內(nèi)容]利用RPCDCOM堆棧緩沖區(qū)溢出漏洞,對(duì)遠(yuǎn)程目標(biāo)主機(jī)執(zhí)行一次實(shí)際的緩沖區(qū)溢出攻擊,獲取遠(yuǎn)程Shell。溢出成功獲取遠(yuǎn)程Shell之后,驗(yàn)證所獲得的權(quán)限。獲取遠(yuǎn)程主機(jī)的敏感信息。實(shí)驗(yàn)指導(dǎo):運(yùn)行實(shí)驗(yàn)工具目錄下的RPCGUI.exe。
在"IPAddress"輸入目標(biāo)服務(wù)器的IP地址為"192.168.33.111"。在"OperatingSystem"中選擇目標(biāo)服務(wù)器的操作系統(tǒng)類型為"Windows2000(ALL)"。在"ExploitPort"中選擇目標(biāo)服務(wù)器開放的RPCDCOM端口,默認(rèn)為135。在"ShellPort"中任意輸入本地開放的監(jiān)聽端口(1024-65535),來等待遠(yuǎn)程服務(wù)器的反向連接。點(diǎn)擊"Exploit"按鈕發(fā)起遠(yuǎn)程溢出攻擊。等待一會(huì),如果溢出成功,將會(huì)獲得一個(gè)CMDShell。在CmdShelI中進(jìn)入C:\ServerData目錄中,運(yùn)行whoami程序來查看溢出之后所獲得的權(quán)限。參考以下一些命令:oC:ocdc:\serverdataowhoami請(qǐng)將所有獲得的信息寫入實(shí)驗(yàn)報(bào)告。在CMDShelI窗口中輸入一些Dos命令來獲取遠(yuǎn)程主機(jī)的系統(tǒng)版本、主機(jī)名稱,網(wǎng)絡(luò)地址信息、端口連接狀況,列舉所有用戶、管理員組用戶,查看系統(tǒng)開放的服務(wù)。參考以下一些命令:overohostnameoipconfig/allonetstat-anonetuseronetlocalgroupadministratorsonetstart請(qǐng)將所有獲得的信息寫入實(shí)驗(yàn)報(bào)告。?試分析在該遠(yuǎn)程CmdShelI中還可以執(zhí)行什么操作,認(rèn)識(shí)緩沖區(qū)溢出的強(qiáng)大攻擊性和危害。請(qǐng)將心得體會(huì)寫入實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)原理:一.緩沖區(qū)溢出系統(tǒng)基礎(chǔ)計(jì)算機(jī)程序就是計(jì)算機(jī)要執(zhí)行的指令的集合。所有的程序都是用某種計(jì)算機(jī)語言來編寫的。程序運(yùn)行時(shí),需要先經(jīng)過編譯、鏈接生成可執(zhí)行的計(jì)算機(jī)能識(shí)別的機(jī)器指令,然后再加載到內(nèi)存空間運(yùn)行。計(jì)算機(jī)程序在內(nèi)存空間的影像,可分為3個(gè)部分:文本(代碼)區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū),如圖1所示。其中?文本區(qū)用于保存程序執(zhí)行的指令和只讀數(shù)據(jù),這些指令指出程序運(yùn)行的流程。
數(shù)據(jù)區(qū)包括未初始化數(shù)據(jù)區(qū)(BSS)和已初始化數(shù)據(jù)區(qū),前者用于存儲(chǔ)靜態(tài)分配的變量(static類型),后者用于存儲(chǔ)程序的初始化數(shù)據(jù)。堆棧區(qū)用于實(shí)現(xiàn)程序流程的改變,包括堆和棧兩個(gè)部分。其中,堆用于存儲(chǔ)程序運(yùn)行過程中動(dòng)態(tài)分配的數(shù)據(jù)塊(即調(diào)用malloc或calloc函數(shù)分配的內(nèi)存);棧用于存儲(chǔ)過程調(diào)用和函數(shù)調(diào)用所傳遞的參數(shù)、返回地址、局部變量等。U(Sl.inkJI:(E!i5>J|i.Ik?PiI V-fiU(Sl.inkJI:(E!i5>J|i.Ik?PiI V-fif-J內(nèi)&魁矩hi敗據(jù)區(qū)刊希ij第用切圖1程序在內(nèi)存的基本影像在傳統(tǒng)的程序設(shè)計(jì)中,通常借助過程調(diào)用和函數(shù)調(diào)用,改變程序運(yùn)行的流程。每次進(jìn)行過程和函數(shù)調(diào)用時(shí),都要先將返回地址信息壓入到堆棧中。過程和函數(shù)調(diào)用返回時(shí),讀取堆棧數(shù)據(jù),獲取返回地址,將程序的控制權(quán)交還給原來的程序,將程序重新定向到原來的流程中。在堆棧中,使用一種稱為“棧幀”的數(shù)據(jù)結(jié)構(gòu)保存返回地址信息。棧幀包含下列信息:傳遞給函數(shù)的參數(shù)、函數(shù)返回后下一條指令的地址、函數(shù)中分配的局部變量、恢復(fù)前一個(gè)棧幀所需的數(shù)據(jù)(基地址寄存器值)函數(shù)調(diào)用前,將棧幀內(nèi)容壓入棧中;函數(shù)調(diào)用后,將棧幀內(nèi)容彈出,獲取執(zhí)行的下一條指令的地址。函數(shù)在棧中的內(nèi)存影像如圖2所示。函數(shù)中的局部變量調(diào)用函數(shù)前的曲卩調(diào)用函數(shù)后的返回地址傳謹(jǐn)給函數(shù)的實(shí)參內(nèi)存低地址內(nèi)存高地址函數(shù)中的局部變量調(diào)用函數(shù)前的曲卩調(diào)用函數(shù)后的返回地址傳謹(jǐn)給函數(shù)的實(shí)參內(nèi)存低地址內(nèi)存高地址圖2函數(shù)在棧中的影像由圖2可以看出,棧是從內(nèi)存高地址向低地址增長的。也就是說,如果將數(shù)據(jù)壓入,棧頂?shù)刂穼p?。蝗绻麑?shù)據(jù)彈出,棧頂?shù)刂穼⒃黾?。在函?shù)的棧幀中,函數(shù)局部變量占用的內(nèi)存空間非常重要,通常,在函數(shù)中會(huì)使用類似“charbuffer[20]”之類的C語言語句定義一個(gè)緩沖區(qū)。向緩沖區(qū)填充數(shù)據(jù)時(shí),首先填充低地址,然后填充高地址,其增長方向與棧的增長方向相反。如果向緩沖區(qū)填充的數(shù)據(jù)超過緩沖區(qū)的大小,那么它將繼續(xù)向高地址填充數(shù)據(jù),很可能覆蓋掉“調(diào)用函數(shù)后的返回地址”,使得函數(shù)返回時(shí),程序的執(zhí)行順序發(fā)生變化。緩沖區(qū)溢出攻擊,就是通過向緩沖區(qū)填充過量的數(shù)據(jù),覆蓋“調(diào)用函數(shù)后的返回地址”,使函數(shù)的返回地址變成“攻擊程序”的代碼地址。這樣,當(dāng)函數(shù)返回時(shí),程序的控制權(quán)將轉(zhuǎn)到“攻擊代碼”,實(shí)現(xiàn)攻擊目的。二.緩沖區(qū)溢出存在的條件緩沖區(qū)溢出的實(shí)質(zhì)是存放在緩沖區(qū)中的數(shù)據(jù)越界,覆蓋了函數(shù)的返回地址。但是,為什么會(huì)產(chǎn)生這種情況呢?是不是所有的程序都會(huì)發(fā)生緩沖區(qū)溢出呢?緩沖區(qū)溢出的發(fā)生必須具備若干條件,包括:使用非類型安全的語言,如C/C++。緩沖區(qū)溢出主要出現(xiàn)在由C和C++編寫的程序中,因?yàn)檫@些語言不執(zhí)行數(shù)組邊界檢查和類型安全檢查。如果開發(fā)人員編寫程序時(shí)沒有檢查數(shù)組是否越界,就很有可能會(huì)發(fā)生緩沖區(qū)溢出。此外‘C/C++允許開發(fā)人員創(chuàng)建非常接近硬件運(yùn)行的程序,允許直接訪問內(nèi)存和計(jì)算機(jī)寄存器,從而可以方便地改變程序的流程。其他語言編寫的程序也會(huì)發(fā)生緩沖區(qū)溢出,但相對(duì)來講就比較少了。一般發(fā)生緩沖區(qū)溢出,都是由于運(yùn)行時(shí)環(huán)境的錯(cuò)誤,而不是由開發(fā)人員造成的。以不安全的方式訪問或復(fù)制緩沖區(qū)。編寫程序時(shí)沒有考慮目標(biāo)緩沖區(qū)的大小問題,以至當(dāng)應(yīng)用程序從用戶(或攻擊者)那里讀取數(shù)據(jù),將數(shù)據(jù)復(fù)制到應(yīng)用程序所維護(hù)的目標(biāo)緩沖區(qū)時(shí)超出該緩沖區(qū)的大小,造成緩沖區(qū)溢出。編譯器將緩沖區(qū)放在內(nèi)存中關(guān)鍵數(shù)據(jù)結(jié)構(gòu)旁邊或鄰近的位置。程序編輯完畢,首先要先進(jìn)行編譯,將程序轉(zhuǎn)換成機(jī)器可識(shí)別的機(jī)器指令,然后將程序加載到內(nèi)存空間中運(yùn)行。通常,編譯器將緩沖區(qū)放在''令人感興趣的”數(shù)據(jù)結(jié)構(gòu)旁邊,如C++V表、異常處理程序地址、函數(shù)指針等。這樣,當(dāng)緩沖區(qū)溢出時(shí),就會(huì)改變這些地址信息,繼而改變程序的流程。例如,某個(gè)函數(shù)的緩沖區(qū)緊鄰堆棧(堆棧中存放著函數(shù)的返回地址,見圖2),如果攻擊者可以使該緩沖區(qū)發(fā)生溢出,就可以覆蓋函數(shù)的返回地址,當(dāng)函數(shù)返回時(shí),程序流程就會(huì)轉(zhuǎn)到攻擊者定義的地址或者攻擊程序的地址。三.緩沖區(qū)溢出的攻擊方式緩沖區(qū)溢出攻擊的目的在于擾亂具有某些特權(quán)運(yùn)行的程序的功能,使得攻擊者取得程序的控制權(quán)。如果該程序具有足夠的權(quán)限,那么整個(gè)主機(jī)就被控制了。但是攻擊者如何才能讓程序運(yùn)行攻擊程序呢?要達(dá)到該目的,攻擊者必須實(shí)現(xiàn)以下兩個(gè)目標(biāo):在程序的地址空間里安排適當(dāng)?shù)拇a。實(shí)現(xiàn)該目標(biāo)的方法有:植入法和利用已經(jīng)存在的代碼。植入法所謂植入法,就是攻擊者向被攻擊的程序輸入一個(gè)字符串,該字符串里包含需要運(yùn)行的指令,程序會(huì)將該字符串放到緩沖區(qū)中。按照緩沖區(qū)的位置不同,可以將緩沖區(qū)溢出攻擊分為:棧溢出(StackOverflow)、堆溢出(HeapOverflow)和BSS(靜態(tài)數(shù)據(jù)區(qū))溢出。利用已存在的代碼如果攻擊者需要執(zhí)行的代碼已經(jīng)存在于被攻擊程序中,則只需對(duì)代碼傳遞一些參數(shù),使程序?qū)崿F(xiàn)所需的目的。例如,攻擊代碼要求執(zhí)行“exec(“/bin/sh”)”,而在libc庫中的代碼執(zhí)行“exec(arg)”,其中arg是一個(gè)指向一個(gè)字符串的指針參數(shù),那么攻擊者只要把傳入的參數(shù)指針改向指向“/bin/sh”。適當(dāng)?shù)某跏蓟拇嫫骱蛢?nèi)存,讓程序跳轉(zhuǎn)到攻擊者安排的地址空間執(zhí)行。實(shí)現(xiàn)該目標(biāo)的基本方法是溢出一個(gè)沒有邊界檢查或者其它弱點(diǎn)的緩沖區(qū)。通過溢出一個(gè)緩沖區(qū),攻擊者可以用暴力的方法改寫相鄰的程序空間而直接跳過系統(tǒng)的檢查。常見的改變程序指針的方法主要有:利用活動(dòng)紀(jì)錄,即棧幀通過溢出堆棧中的局部變量,使返回地址指向攻擊代碼,這樣,函數(shù)調(diào)用結(jié)束時(shí),程序就跳轉(zhuǎn)到攻擊者設(shè)定的地址。這種溢出方式就是常說的“堆棧溢出攻擊”,是目前最常用的緩沖區(qū)溢出攻擊方式。利用函數(shù)指針函數(shù)指針可以用來定位任何地址空間。如果某個(gè)函數(shù)定義了一個(gè)返回值為void的函數(shù)指針變量,那么只要在該函數(shù)指針附近找到一個(gè)能夠溢出的緩沖區(qū),溢出該緩沖區(qū)改變函數(shù)指針。這樣,當(dāng)程序通過函數(shù)指針調(diào)用函數(shù)時(shí),程序的流程自然就會(huì)轉(zhuǎn)到攻擊程序。例如,Linux系統(tǒng)下的superprobe程序。利用長跳轉(zhuǎn)緩沖區(qū)在C語言中包含了一個(gè)簡(jiǎn)單的檢驗(yàn)/恢復(fù)系統(tǒng),稱為setjmp/longjmp。意思是在檢驗(yàn)點(diǎn)設(shè)定“setjmp(buffer)”,用“l(fā)ongjmp(buffer)”來恢復(fù)檢驗(yàn)點(diǎn)。如果攻擊者能夠進(jìn)入緩沖區(qū)的空間,使“l(fā)ongjmp(buffer)”指向攻擊代碼,然后誘使程序進(jìn)入恢復(fù)程序進(jìn)入緩沖區(qū)模式,就可以使程序執(zhí)行攻擊代碼了。四.RPCDCOM溢出原理1.基本概念遠(yuǎn)程過程調(diào)用(RPC)是Windows操作系統(tǒng)使用的一個(gè)協(xié)議。服務(wù)名稱為RPCSS,描述為:''提供終結(jié)點(diǎn)映射程序(endpointmapper)以及其它RPC服務(wù)”。RPC提供一種內(nèi)部進(jìn)程通訊機(jī)制,允許在一臺(tái)電腦上運(yùn)行的程序無縫的執(zhí)行遠(yuǎn)程系統(tǒng)中的代碼。協(xié)議本身源于開放軟件基金會(huì)(OSF)RPC協(xié)議,但添加了一些Microsoft特定的擴(kuò)展。RPC可以實(shí)現(xiàn)代碼共享,提高系統(tǒng)資源的利用率,也可以將大量的數(shù)值處理的操作放在處理能力較強(qiáng)的系統(tǒng)上運(yùn)行,從而減輕前端機(jī)的負(fù)擔(dān)。DCOM(DistributedComponentObjectModel,分布式COM):該協(xié)議的前身是OSFRPC協(xié)議,但是增加了微軟自己的一些擴(kuò)展,擴(kuò)展了組建對(duì)象模型技術(shù)(COM),使其能夠支持在局域網(wǎng),廣域網(wǎng)甚至interent上不同的計(jì)算機(jī)的對(duì)象之間的通訊。RPC的DCOM接口來處理由客戶端機(jī)器發(fā)送給服務(wù)器的DCOM對(duì)象激活請(qǐng)求。在windows2000中,我們可以在''開始->運(yùn)行"中輸入命令“dcomcnfg.exe”進(jìn)入DCOM的配置屬性界面進(jìn)行配置。2.漏洞原理分析在WindowsRPC在分布式組件對(duì)象模型(DCOM)接口的處理中存在一個(gè)緩沖區(qū)溢出漏洞。Windows的DCOM實(shí)現(xiàn)在處理一個(gè)參數(shù)的時(shí)候沒有檢查長度。通過提交一個(gè)超長(數(shù)百字節(jié))的文件名參數(shù)可以導(dǎo)致堆溢出,從而使RpcSS服務(wù)崩潰。精心構(gòu)造提交的數(shù)據(jù)就可以在系統(tǒng)上以本地系統(tǒng)權(quán)限運(yùn)行代碼。攻擊者可以在系統(tǒng)中采取任何行為,包括安裝程序,竊取更改或刪除數(shù)據(jù),或以完全權(quán)限創(chuàng)建新帳號(hào)。分布式組件對(duì)象模型(DCOM)通用接口導(dǎo)致問題的調(diào)用如下:hr=CoGetInstanceFromFile(pServerInfo,NULL,0,CLSCTX_REMOTE_SERVER,STGM_READWRITE,L"C:\\1234561111111111111111111111111.doc",1,&qi);這個(gè)調(diào)用的文件名參數(shù)(第5個(gè)參數(shù),會(huì)引起溢出),當(dāng)這個(gè)文件名超長的時(shí)候,會(huì)導(dǎo)致客戶端的本地溢出(在RPCSS中的GetPathForServer函數(shù)里只給了0X220堆棧的空間,但是是用lstrcpyw進(jìn)行拷貝的。在客戶端給服務(wù)器傳遞這個(gè)參數(shù)的時(shí)候,會(huì)自動(dòng)轉(zhuǎn)化成如下格式:L“\\servername\c$\123456111111111111
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)專干考試題型及答案
- 社會(huì)化營銷試題及答案
- 青海遴選考試題庫及答案
- 廣東省深圳市龍崗區(qū)2025-2026學(xué)年三年級(jí)上學(xué)期期末學(xué)業(yè)測(cè)試數(shù)學(xué)試題(含答案)
- 吉林省吉林市蛟河市2025-2026學(xué)年七年級(jí)上學(xué)期1月期末考試語文試卷(含答案)
- 廣東省深圳市龍崗區(qū)2024-2025學(xué)年上學(xué)期八年級(jí)地理期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題(含答案)
- 2026 年初中英語《名詞》專項(xiàng)練習(xí)與答案 (100 題)
- 車險(xiǎn)理賠溝通培訓(xùn)課件
- 帕金森節(jié)目題目及答案
- 2026年大學(xué)大二(建筑環(huán)境與能源應(yīng)用工程)暖通空調(diào)系統(tǒng)設(shè)計(jì)綜合測(cè)試題及答案
- 2022-2023學(xué)年五年級(jí)數(shù)學(xué)上冊(cè)第五單元:列方程解行程問題專項(xiàng)練習(xí)(含答案)
- 物業(yè)工程維修培訓(xùn)內(nèi)容
- 神經(jīng)外科規(guī)培結(jié)業(yè)考試題庫及答案
- 廣東省領(lǐng)航高中聯(lián)盟2024-2025學(xué)年高一下學(xué)期第一次聯(lián)合考試語文試卷(含答案)
- 社區(qū)健康服務(wù)與管理課件
- 投資車行合同協(xié)議書
- 國際消防安全系統(tǒng)規(guī)則
- 靜脈治療新理念
- 高中研究性學(xué)習(xí)指導(dǎo)課課件系列總結(jié)階段-學(xué)生如何開展研究活動(dòng)
- 民辦職業(yè)培訓(xùn)方案模板
- 04S519小型排水構(gòu)筑物(含隔油池)圖集
評(píng)論
0/150
提交評(píng)論