緩沖區溢出實驗要求&指導


實驗要求

對一個可執行程序“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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM