在通過了基本的測試程式後,開始分析其原理。
本問的內容還是主要參考
先回顧下一些基礎:
匯程式設計序快速入門(32位):
程式記憶體空間分配:
函式幀結構
現代高階語言c/c++,程式裡每個函式對應乙個函式幀結構(在棧中),在呼叫乙個函式前,會在棧中儲存一些資料,在跳轉到新的函式時,新的函式首先建立自己的幀結構,接著計算完成後登出自己的幀結構,並恢復前乙個函式的幀結構。
其中用到的最主要的(上面「匯程式設計序快速入門」中有詳細介紹)就是函式呼叫時程式的棧中的資料變換,如下圖所示。
針對如下**:
1 #include 2其棧中的結構如下圖所示,當然這是針對32位程式的~3void f(int a, intb)4
78intmain()
9
1) main函式在呼叫f函式前,首先將參入的引數壓入棧中;
2)接著,將當前程式執行的下乙個的位置eip加入棧中,後面f函式返回時用;
3)進入f函式,f函式首先將當前的ebp壓入棧中,接著mov esp, ebp(將ebp指向當前的棧頂),接著以ebp為基礎構建自己的函式幀結構。
函式幀結構中包含當前函式的區域性變數(攻擊的示例程式的buffer變數及在這裡面)
4)在f函式執行完成後,會將棧中的ebp值彈出,恢復到ebp暫存器中,還原esp暫存器,接著彈出eip變數,程式根據eip變數指向的位置接著執行main函式後面的程式部分。
示例程式的棧結構
對buf進行資料拷貝,得到的結果如下圖所示:
當0xffffd710覆蓋了原來eip的位置時,f函式在返回時就會將0xffffd710彈出來給eip,程式根據eip的位址尋找下面執行的程式。
小結
本節介紹了緩衝區溢位漏洞攻擊的原理,主要是修改棧中eip的值。
參考:
「緩衝區溢位攻擊」原理分析及例項演示
一.原理分析 緩衝區溢位是一種非常普遍 非常危險的漏洞,在各種作業系統 應用軟體中廣泛存在。利用緩衝區溢位攻擊,可以導致程式執行失敗 系統宕機 重新啟動等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。要了解緩衝區溢位攻擊,就得先了解程式函式呼叫的棧記憶體分...
緩衝區溢位攻擊試驗(bufbomb c)
本文的 來自 於 computer systems a programmer s perspective 深入理解計算機系統 一書中的bufbomb.c作業題。實驗環境xp vc6.0。另 linux2.6 gcc4.x下目前碰到棧保護等措施,暫時還沒研究出結果。問題描述如下 分析下面程式,可以得知...
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...