步驟2 返回到fizz()並準備相應引數
2.1 解題思路
找到fizz()**如下:
08048e60:
8048e60: 55 push %ebp
8048e61: 89e5 mov %esp,%ebp
8048e63: 83ec 08 sub $0x8,%esp
8048e66: 8b45 08 mov 0x8(%ebp),%eax
8048e69: 3b05 d4 a1 04 08 cmp 0x804a1d4,%eax
//0x804a1d4存放就是使用者的cookie值,即執行命令「./bufbomb-t luoxiaolin」時傳入的。
8048e6f: 741f je 8048e90
8048e71: 8944 24 04 mov %eax,0x4(%esp)
8048e75: c704 24 8c 98 04 08 movl $0x804988c,(%esp)
8048e7c: e827 f9 ff ff call 80487a8
8048e81: c704 24 00 00 00 00 movl $0x0,(%esp)
8048e88: e85b f9 ff ff call 80487e8
8048e8d: 8d76 00 lea 0x0(%esi),%esi
8048e90: 8944 24 04 mov %eax,0x4(%esp)
8048e94: c704 24 d9 95 04 08 movl $0x80495d9,(%esp)
8048e9b: e808 f9 ff ff call 80487a8
8048ea0: c704 24 01 00 00 00 movl $0x1,(%esp)
8048ea7: e844 fc ff ff call 8048af0
8048eac: ebd3 jmp 8048e81
8048eae: 89f6 mov %esi,%esi
分析:由8048e66: 8b 45 08 mov 0x8(%ebp),%eax 得知,
fizz的引數位置在%ebp+0x8,在%ebp之前的棧中存的是%ebp的舊值。
2.2 解題過程
光看**還是不能理解的很清楚,所以現在我們把棧幀的結構畫出來:
圖13(圖中位址是根據gdb除錯得出的)
這裡假設呼叫getbuf時,輸入正確的字串後,函式返回到fizz()函式,那麼,test的棧幀結構將變成下圖。
圖14由圖可以看出,deadbeff下面到ebp舊值上面的區域,還有%ebp舊值以下的部分都是fizz函式的棧幀結構。那麼這道題的答案也就知道了,這次需要輸入40個位元組的字串。倒數第8至倒數第16個位元組代表fizz的位址,倒數8個位元組是傳入的引數,fizz()函式的位址為「08048e60」,引數根據題目要求需要傳入乙個黑客cookie值,我的cookie值為「0x33102f15」。
2.3 最終結果截圖
圖15
緩衝區溢位實驗
具體過程嚴格按照上面所描述。首先配置好環境。存漏洞程式stack.c,如圖,需對其許可權做更改,更改前後的許可權變化如圖,同樣是按照文件中的 存乙個exploit.c,先存著。使用gdb,在這裡我遇到了問題,因為在設定斷點時輸錯了位址,所以在輸入r時執行失敗,顯示無法插入斷點。解決方法 使用help...
緩衝區溢位漏洞實驗
根據實驗指導輸入命令安裝一些用於編譯 32 位 c 程式的軟體包 關閉位址空間隨機化功能 設定 zsh 程式 輸入命令 linux32 進入32位linux環境 在 tmp 目錄下新建乙個 stack.c 檔案,編輯 編譯該程式,並設定 set uid 在 tmp 目錄下新建乙個 exploit.c...
緩衝區溢位攻擊試驗(bufbomb c)
本文的 來自 於 computer systems a programmer s perspective 深入理解計算機系統 一書中的bufbomb.c作業題。實驗環境xp vc6.0。另 linux2.6 gcc4.x下目前碰到棧保護等措施,暫時還沒研究出結果。問題描述如下 分析下面程式,可以得知...