1. 程式人生 > >CSAPP lab3 bufbomb-緩沖區溢出攻擊實驗

CSAPP lab3 bufbomb-緩沖區溢出攻擊實驗

代碼 我們 lob 棧幀 遞增 park global 緩沖 緩沖區溢出

完成這個實驗大概花費一天半的時間,看了很多大佬的博客,也踩了很多的坑,於是打算寫一篇博客重新梳理一下思路和過程,大概會有三篇博客吧。

實驗目的:

通過緩沖區溢出攻擊,使學生進一步理解IA-32函數調用規則和棧幀結構。

實驗技能:

需要使用objdump來反匯編目標程序,使用gdb單步跟蹤調試機器代碼,查看相關內存及寄存器內容,也需要學生掌握簡單的IA32匯編程序編寫方法。

實驗要求:

5個難度等級(0-4逐級遞增)

級別0、Smoke(candle):構造攻擊字符串作為目標程序輸入,造成緩沖區溢出,使目標程序能夠執行smoke函數。


級別1、Fizz(sparkler):構造攻擊字符串作為目標程序輸入,造成緩沖區溢出,使目標程序能夠執行fizz函數;fizz函數含有一個參數(cookie值),構造的攻擊字符串應能給定fizz函數正確的參數,使其判斷成功。


級別2、Bang(firecracker):構造攻擊字符串作為目標程序輸入,造成緩沖區溢出,使目標程序能夠執行bang函數;並且要篡改全局變量global_value為cookie值,使其判斷成功。因此,需要在緩沖區中註入惡意代碼篡改全局變量。


級別3、Boom(dynamite):前面的攻擊都是使目標程序跳轉到特定函數,進而利用exit函數結束目標程序運行。Boom要求攻擊程序能夠返回到原調用函數test繼續執行,即要求攻擊之後,還原對棧幀結構的破壞。


級別4、kaboom(Nitro):本攻擊需要對目標程序連續攻擊n=5次,但每次攻擊,被攻擊函數的棧幀內存地址都不同,也就是函數的棧幀位置每次運行時都不一樣。因此,要想辦法保證每次都能夠正確復原原棧幀被破壞的狀態,使程序每次都能夠正確返回。


從這個等級的命名我們也能窺探到一些端倪,candle 蠟燭,sparkler 煙火,firecracker 爆竹,dynamite 火藥,Nitro 硝酸基甲苯這一套命名規則顯然讓我們想起來lab2的拆彈實驗,可見級別越高威力必然也就越大。而另外一套命名規則顯然是從效果來看的,Smoke 冒煙,Fizz 劈啪作響,Bang 怦然巨響,Boom 隆隆作響,kaboom 大炸裂,果然有點意思。

CSAPP lab3 bufbomb-緩沖區溢出攻擊實驗