攻擊過程
0.關閉隨機位址空間的保護功能
1.編寫攻擊**:
code 的值為課件上的值,這個值不一定能夠使緩衝區溢位後呼叫到bug函式,因為我們不知道bug函式的**會被放在哪個位址上。
2.在關閉gcc的棧保護功能下編譯**:
3.用gdb進行除錯,檢視main函式的彙編**,找到呼叫copy後的下一指令的位置為0x0804849b
(注意,由於漏了截圖,此圖是我後來改變了code值後成功攻擊的圖,不影響本步的分析)
到此,準備工作完成,我們得到了bug函式**的位址。接下來就是對如何使用緩衝區溢位呼叫bug函式進行設計了。
9.編譯改動後的**,執行程式,成功呼叫bug函式:
10.用gdb除錯,斷點到strcpy前,檢視棧資訊:
攻擊過程中棧幀的變化
呼叫copy函式前,棧頂在0xbffff0d0:
進入到copy函式,在執行strcpy之前,棧頂在0xbffff0a0:
因此,我們得到棧幀資訊如下:
0x0804a01c(實參code的位址)
0x0804849b(函式結束後返回的位址)
0xbffff0e8(pre ebp)
為bug分配的空間
esp棧頂
執行完strcpy後,檢視棧資訊,棧頂仍在0xbffff0a0:
此時,棧幀圖如下:
0x0804a000(實參code的位址被改了乙個byte)
0x08048472(bug函式的位址)
0x41414141
為bug分配的空間(41414141...)
esp棧頂
緩衝區溢位實驗
具體過程嚴格按照上面所描述。首先配置好環境。存漏洞程式stack.c,如圖,需對其許可權做更改,更改前後的許可權變化如圖,同樣是按照文件中的 存乙個exploit.c,先存著。使用gdb,在這裡我遇到了問題,因為在設定斷點時輸錯了位址,所以在輸入r時執行失敗,顯示無法插入斷點。解決方法 使用help...
緩衝區溢位漏洞實驗
根據實驗指導輸入命令安裝一些用於編譯 32 位 c 程式的軟體包 關閉位址空間隨機化功能 設定 zsh 程式 輸入命令 linux32 進入32位linux環境 在 tmp 目錄下新建乙個 stack.c 檔案,編輯 編譯該程式,並設定 set uid 在 tmp 目錄下新建乙個 exploit.c...
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...