實驗要求
對一個可執行程序“bufbomb”實施一系列5個難度遞增的緩沖區溢出攻擊緩沖區溢出攻擊(buffer overflow attacks)——
即設法通過造成緩沖區溢出來改變該可執行程序的運行內存映像(棧幀
例如將給定的字節序列插入到其本不應出現的內存位置。
- 5個難度級:
- smoke (level 0)
- fizz (level 1)
- bang (level 2)
- boom (level 3)
- kaboom (level 4)
- smoke級最簡單,kaboom級最困難
實驗資料
- 實驗數據包:bufferlab-handout.tar
- 解壓命令:tar xf bufferlab-handout.tar
- 包含下列文件:
- bufbomb:實驗中實施緩沖區溢出攻擊的目標程序
- makecookie
該程序基於命令行參數(用戶號/學號)產生一個唯一的由8個16進制數字組成的字節序列(例如0x1005b2b7)
稱為“cookie”,用作實驗中需要置入棧中的數據之一並區分不同學生的實驗
./makecookie 你的學號,即可生成你的唯一的cookie - hex2raw:字符串格式轉換程序
目標程序介紹
- bufbomb程序接受下列命令行參數:
-
userid
以給定的用戶ID“userid”(例如學號)運行程序。
每次在運行程序時均應指定該參數
因為bufbomb程序將基於userid決定內部使用的cookie值(同makecookie程序的輸出)
在bufbomb程序內部,一些關鍵的棧地址取決於userid所對應的cookie值。 -
-h:打印可用命令行參數列表
-
-n:以“Nitro”模式運行,專用於Level 4實驗階段(棧狀態會不一樣,自己體會)
-
一個小小的演示
實驗前的准備
攻擊方法
一點點關於字符串的說明
設攻擊字符串包含於文件Solution.txt中,
可使用如下命令測試攻擊字符串在bufbomb上的運行結果,並與相應難度級的期望輸出對比,以驗證通過與否
cat solution.txt | ./hex2raw | ./bufbomb -u [userid]
其中solution.txt是你的攻擊字符串, hex2raw是將你的字符串由16進制狀態轉為文本然后輸出到輸入
userid 請填 你的學號
簡而言之,你需要構造的是用十六進制表示的字符串(注意大端小端的區別)並用工具來輸入
Somke的演示
准備工作
首先進行的是前四關的分析,這時候。緩沖區的大小是確定的
數組的首地址也是確定,因此先進行一些准備工作。
我們首先進行代碼的分析:
可見在棧內為數組開辟的大小為50字節的內存。所以為了覆蓋返回地址
應該寫入50+4+4也就是58個字節的數據,其中最后四個字節是要篡改的地址。
- 首先在反匯編文件內找到smoke函數的首地址,也就是程序開始的地址
可見,smoke的首地址是08048ba1,所以將這個值寫在第55到58個字節就能實現攻擊。
- 考慮到小端排序,寫出了以下攻擊文件。
- 運行檢驗程序,成功攻擊
溫馨提示
自己找找getbuf的傳入參數等是什么
過程調用的棧的狀態自己看看
感謝南大教學ppt, 23333