定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出_第1頁
定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出_第2頁
定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出_第3頁
定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出_第4頁
定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告網(wǎng)絡(luò)安全實驗報告實驗名稱:定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出姓名:王嘉琳學(xué)號:090342228指導(dǎo)教師:付宇一、實驗?zāi)康?. 熟練掌握緩沖區(qū)溢出原理2. 利用定位參數(shù)地址實現(xiàn)緩沖區(qū)溢出二、實驗環(huán)境系統(tǒng)環(huán)境:Win dows網(wǎng)絡(luò)環(huán)境:交換網(wǎng)絡(luò)環(huán)境實驗工具:Depends、FindShellBase、UltraEdit-32 、VC+6.0三、實驗實際完成內(nèi)容及結(jié)果分析溢出程序演示(1)進入實驗平臺,單擊工具欄演示目錄”按鈕,進入實驗?zāi)夸洝_M入Mission2目錄,該目錄中有三個文件:OverFlowClie nt.exe該文件是執(zhí)行體文件,功能是新

2、建Administrators組用戶jlcss,用戶密碼1234。CreateShellCode.exe該文件是shellcode生成文件,功能是從OverFlowClient.exe文件中提取功能代碼,并最終生成完整的shellcode.shc文件。OverFlowServer.exe該文件是漏洞溢出文件,功能是加載shellcode.shc文件,并實現(xiàn)通過緩沖區(qū)溢出完成新建 Administrators 組用戶 jlcss。(2)執(zhí)行 OverFlowClient執(zhí)行OverFlowClient文件,當出現(xiàn)“ShellCod執(zhí)行完畢,請按回車退出”提示信息時,表明程序已被成功執(zhí)行,退出程序

3、。右鍵單擊我的電腦”,選擇 管理”進入 計算機管理”,依次選擇 本地用戶和組”丨用戶”,查看右側(cè)“jlcss用'戶信息及其隸屬組。刪除jlcss用戶。查看右側(cè)“ jlcss用戶信息及其隸屬組:1終耐得1濟文件拔入第規(guī)題購于記畳乂件1環(huán)環(huán)1合恬1(3)執(zhí)行 CreateShellCode執(zhí)行CreateShellCode文件,當出現(xiàn)“ Shellcode旨令集生成完畢,請按回車退出"提示信息時,表明程序已被成功執(zhí)行,并且shellcode.shc文件已成功生成。右鍵單擊生成的shellcode.shc文件,使用 “ UltraEdit32 "打開,查看 shellco

4、de指令碼。這些指令碼就是 CreateShellCode 從 OverFlowClient.exe 中提取出來的功能碼。退出UltraEdit-32 。shellcode.shc文件已成功生成:"ICreateShelCodB.Bxe nOvarFtowdantP7K0173 KB157 KB1 KBOOOOOOOh: Si EC 24 10 00 00 60 SS SB EC 81 ECDb 00 00 00OOOOOOlOh:53S657C745FCOODOSO*?CC?45FB60IE800000002Oh:7CC745F4D4F6A97CCG4SEGS3C645E96S00

5、0003Oh;C645EA65C645EE6CC64SEC6CC645ED330000040b;C645EE32C645EF2EC64SFO64Cfi勺5Fl6COODOOOSOh:C64SF2SCC645F300S>5ES50FF55F8390000060h:45E4C645DC6FC64SDD70C645DE65C64S00000070hiDF6EC64SEO00C64SD86EC645D965C645(4)執(zhí)行 OverFlowServer執(zhí)行OverFlowServer.exe,當出現(xiàn)溢出成功!請按回車鍵退出"提示使用“UltraEdi-32"打開,查看 sh

6、ellcode指令碼:已被成功執(zhí)行,并且緩沖區(qū)溢出操作成功。再次打開,表明程序 計算機管理”查看系統(tǒng)用戶jlcss信息。jjflsbftllcode.shc2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告OverFlowServer.exe就是加載了 shellcode.shc文件,在緩沖區(qū)溢出后執(zhí)行了其中的指令碼。 查看系統(tǒng)用戶jlcss信息:2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告運程橙制終喘脫釜色圧文件|撥入魏隸屬于配詈文件|環(huán)埴1令話烹屋于(1);1flVsers溢出實現(xiàn)注進行此操作步驟前,刪除jlcss用戶。1

7、.進入工程單擊工具欄 “ VC6按鈕,啟動 VC+6.0。選擇“ File ” | “ Woekspace”加載工程文件 “ C:OverFlowServer.dsw 。該工程包含三個項目: CreateShellCode、OverFlowClient 和 OverFlowServer。項目功能說明見源文件。2 .生成shellcode功能體(1)首先設(shè)置 OverFlowClient項目為啟動項。(2) 雙擊打開 OverFlowClient.cpp源文件,在該源文件中需要填寫的代碼有:kernel32.dll基址(第21行),LoadlibraryA 函數(shù)的絕對內(nèi)存地址(第 23行)和sh

8、ellExecuteA函數(shù)(隸 屬于Shell32.dll動態(tài)庫)的絕對內(nèi)存地址(第25行)。使用 Depe nds工具打開 C:ExpNISNetAD-LabToolsBufferLeakToolsFi ndShellBase'Fi ndShellBase.exe文件定位上述內(nèi)存地址,具體操作參見任務(wù)一。kernel32.dll 基址:KERWEL32.DLL | 07/2S/DS 8;COa | 1,205尼犧 | A| IntelxB6 | Wi32 console | Yes | OE7C0aO9aCLoadlibraryA函數(shù)的相對地址:H 595(0x0253)5G4 fO

9、xOZSZ) LoadLibrar/AOx0D001E60絕對內(nèi)存地址為:0x00001E60+0x7C800000=0x7C801E60shellExecuteA函數(shù)的相對地址:EI 無0 (00168)藥3 (OxflLO?) ShellExecuteAOxOOQSF®4O SHEIL32,DLL | 07/25/05 BiDQa | B.237,5681A| Intel xM | Win32 GUI | Y« | Ox7CA10000 |絕對內(nèi)存地址為:0x0008F6D4+0x7CA10000=0x7CA9F6D4所以,填入程序中如下所示:23:PUOID pFUH

10、LOdLibraryA = ( PVOID )0x7G801E60;25:PIIOID pFunShellExecuteA = ( PUOlb )0x7CA9FAD4;fl fll lafSiht*t ii bfl .-»ir* IB fl" ji> h-» f®fent T _iF if" hfa fTh H j£ Ci Ila l-»(3) 編譯并生成 OverFlowClient.exe ,執(zhí)行 OverFlowClient.exe,確定系統(tǒng)是否新建了 jlcss 用戶,并隸屬 Administrators組。查

11、看:E Administrator£ juest £iusr_hostIrtemet來宣臨戶HOST啟動I【5進程她戶student£SLPPORT_36.,CN=MKr0$0ft torpor£testtestfivUSRJtetlAVSA Servar Account3. 生成shellcode指令碼(1)設(shè)置 CreateShellCode 為啟動項。雙擊打開 CreateShellCode.cpp源文件,CreateShellCode的工作流程是:首先生成shellcode 頭,并將相關(guān)指令碼寫入shellcode.shc文件中;接下來是生成sh

12、ellcode功能體,功能體代碼來自O(shè)verFlowClient.exe中shellcode函數(shù)執(zhí)行體,將功能體代碼追加到shellcode.shc中;最后是生成 shellcode尾,同樣將其指令碼追加到shellcode.shc中。(2)這里需要填寫的宏數(shù)值有:第 16 行 SHELLCODE_BODY_START ( OverFlowClient.exe 中 ShellCode 主體起始偏移地 址);第 17 行 SHELLCODE_BODY_LEN(OverFlowClient.exe 中 ShellCode 主體代碼長度);第 18、66 行 CORRECT_RETURN_ADDR

13、(OverFlowServer 中 overflow 調(diào)用完成后程序 正常執(zhí)行返回地址,即 OverFlow正常調(diào)用完成后的下一條指令地址);第72行在OverFlowServer中函數(shù)OverFlow調(diào)用執(zhí)行前,ebp基地指針地址;第76行OverFlow溢出返回地址,即函數(shù)溢出后shellcode得以執(zhí)行的首地址。 獲取 SHELLCODE_BODY_START 、SHELLCODE_BODY_LEN 值調(diào)試OverFlowClient.exe (將該項目設(shè)置為啟動項)確定 ShellCode函數(shù)入口偏移地址及 函數(shù)體大小,調(diào)試過程參見圖22-2-6所示。void ShellCadef)/

14、 Uindoi HNODULE M/ Window PHO ID pFul / UindoiShellCode:O 00401020 55OSU01O21 8B ECC04O1O23 61 EC A800401020 <=> ShellCodeA 口偏移地址oo oo oosubebp,esp esp. M8hPHO ID pFui5Fpopedi/ 加載計0Q4011B25EpopesiCHAR s/Sh(popebKHHODULf 擷004011B48B E5mouesp,ebp5D004011B6<=> ShellCode 束地址 根據(jù)調(diào)試結(jié)果填寫CreateSh

15、ellCode.cpp源文件中 SHELLCODE_BODY_START 宏和SHELLCODE_BODY_LEN 宏的值。 其它數(shù)值需要通過調(diào)試OverFlowServer來獲取,而 OverFlowServer的執(zhí)行又依賴于shellcode.shc文件,所以暫且編譯生成CreateShellCode.exe文件,執(zhí)行該文件生成臨時shellcode.shc 文件。4. 調(diào)用 OverFlowServer上接步驟3,我們已經(jīng)獲得了 ShellCode執(zhí)行體指令碼,還需要獲取溢出后程序正常返回 地址、OverFlow函數(shù)調(diào)用前ebp基礎(chǔ)指針地址和shellcode執(zhí)行的緩沖區(qū)首地址。(1)O

16、verFlow正常調(diào)用返回時的下一條指令地址。設(shè)置OverFlowServer files為啟動項,雙擊打開OverFlowServer.cpp文件。程序首先打開存放shellcode指令碼的文件(默認名稱為 shellcode.shc),讀取shellcode.shc的全部內(nèi)容至接 收緩沖區(qū)中。接下來就是利用memcpy函數(shù)實現(xiàn)接收緩沖區(qū)的拷貝,目標地址是OverFlow函數(shù)內(nèi)的局部緩沖區(qū),該緩沖區(qū)默認大小為 450字節(jié),需要根據(jù)實際調(diào)試結(jié)果重新確定其大小。最后在OverFlow調(diào)用完成后程序繼續(xù)執(zhí)行 (溢出執(zhí)行后程序依然能夠正常繼續(xù)運行)。調(diào)整TempBuffer緩沖區(qū)大小,使其大于臨時s

17、hellcode指令碼長度,這樣做的目的是讓程 序正常執(zhí)行(不發(fā)生溢出),以便我們能夠獲取 OverFlow函數(shù)執(zhí)行調(diào)用后的正確返回地址。 調(diào)試獲取OverFlow函數(shù)正常調(diào)用執(zhí)行后的下一條指令地址。調(diào)試過程如圖22-2-7所示。G 0uerFlow( recbuf r ircount );"正常情況下,Ou葉F"誠同用后的程序執(zhí)行3卻:35:/正常情況下,0uerFlo<用后的程序執(zhí)行 printf(-溢岀成功!請按回車退出。5"3百:=> 004011OApush004011 OA<>OverFl珅調(diào)用返回地址604311 OFcall

18、printf (0CU01870)OOH81111Iaddesp,437:gtchar();填寫該指針地址到CreateShellCode.cpp文件中。(2)OverFlow函數(shù)調(diào)用前ebp基地址指針。單步調(diào)試程序定位到OverFlow函數(shù)入口處,獲取此時的EBP指針地址,如圖22-2-8所示。2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告RegistersEAX = 0012FS80 EBXECX = 00423A90 EDXESI = 0QOI30U00 EDIEIP = 0940192a ESPEBP = O012FF89 EFLDS - 0023 ES = 00237FFD7

19、O0000QQ01B80012FF800012FB1CQ9OQ02O6 C£ = OQ1BSS = 0023 FS = R03E2011-2012學(xué)年第二學(xué)期網(wǎng)絡(luò)安全課程設(shè)計實驗報告GS = 0000 OU=0 UP=0 EI=1 PL=0 ZR=0 AC-0PE=1 CV=0STB =p填寫EBP指針地址到CreateShellCode.cpp文件中。(3) 最后我們來確定shellcode的最后4字節(jié),從實驗原理中可知需用這4字節(jié)數(shù)覆蓋調(diào)用返回地址,使得 shellcode得以執(zhí)行。從 OverFlowServer程序又可知shellcode最后被加載 到TempBuffer緩沖

20、區(qū),所以只要用TempBuffer緩沖區(qū)首地址覆蓋調(diào)用返回地址,在程序溢出后shellcode便會執(zhí)行了。調(diào)用OverFlowServer.exe確定 OverFlow 調(diào)用執(zhí)行過程中TempBuffer緩沖區(qū)的首地址。此時TempBuffer緩沖區(qū)的首地址為:0x0012f954將TempBuffer緩沖區(qū)首地址填寫到CreateShellCode.cpp文件中。至此全部的shellcode指令生成完畢,運行Createshellcode.exe生成完整的 shellcode.sh文件,使用UltraEdit編輯器對其進行查看。OOOOOlOOhccCCCCccccCCCCccccccccc

21、ccccccccc00000 UChcccccccccccccccccccccccccccccc0000012011ccccCCccccccccccccccccccccccccccooaoisohccccCCcccc匚cccccccccccccccccccccOOa014CliccccCCcccc匚匚cc匚亡ccccccccccccccccoooaoisoh匚匚ccCCcccccccc匚uccccccccccccccccaooijoiscuccCGgGCGCXGGccccuuGGgucccccOOOCiDITOhccccccccccCCCCcc(:cccccCt:ccccccCOD 18011

22、匚匚ccCCccccccCCCCcccc匚uccccccccccoooaoIsonccccCCccccccCCcccccccccccc6191OOOOQlaOhzc10000BA0A11DOFF90909090scOOQDOlloOhFF1200STF912005.調(diào)試確定TempBuffer緩沖區(qū)大小調(diào)試OverFlowServer.exe得到OverFlow調(diào)用返回時的地址,將返回地址與shellcode.shc中的十六數(shù)相比較,有三種比較結(jié)果:(1) 返回地址是 shellcode最后4字節(jié)數(shù)據(jù)。函數(shù)返回時執(zhí)行shellcode。(2) 返回地址沒有在 shellcode.sh中,緩沖區(qū)

23、空間過大,溢出未發(fā)生??梢钥s小緩沖區(qū) 空間或在最后8個字節(jié)前用0x90(空指令)補充。(3) 返回地址在shellcode.sh中(不是最后4字節(jié)數(shù)據(jù)),緩沖區(qū)空間過小。放大緩沖區(qū)空 間。當改變TempBuffer緩沖區(qū)大小時,其首地址可能會發(fā)生變動,調(diào)試確定TempBuffer首地址,重新填寫 CreateShellCode.cpp,并重新生成 shellcode.shc。經(jīng)過多次調(diào)試后確定緩沖區(qū)大小,當滿足第一種比較結(jié)果時,緩沖區(qū)溢出就可以執(zhí)行下去。運行程序,查看系統(tǒng)用戶jlcss(若jlcss用戶已存在,請先將其刪除再運行程序)及其所屬用戶組。經(jīng)多次調(diào)試,CreateShellCode.cpp中實驗程序部分代碼為:#define SHELLCODE_BODY_START0x1020#define SHELLCODE_BODY_LEN0x197#define CORRECT_RETURN_ADDR0x0040110Aun sig ned char ShellCodeTail='x61', 'x81', 'xc4', 'x2c', 'x10', 'x00', 'x00', 'xba', 'x0A', 'x11&#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論