分享到plurk 分享到twitter 分享到facebook

版本 0cd158c0adbd10f57574a91a8b60a3d2a0b5f455

embedded/Lab34

Changes from 0cd158c0adbd10f57574a91a8b60a3d2a0b5f455 to b4c57011332949e67bb0b069edc4b0473a07519e

---
title: Lab34: Buffer overflow
toc: no
...

預期目標
------------
* 複習 ARM 處理器和指令集,並深入 stack 和執行時期的行為
* 熟悉 objdump、gdb 等工具,並利用上述工具分析執行檔

Lab1
------------
目標:
   * 利用 gdb 與 objdump 分析執行檔,學習 hack 程式!!!!

步驟:
   1. 下載作業`檔案<https://www.dropbox.com/s/d56xcnzipmc8mlv/bomb.tar.gz?dl=0>`_
   2. 解壓縮``$ tar -xzvf bomb.tar.gz``
   3. Hacking!!

程式說明:
   * bomb 這支程式會從標準輸入讀取字串,請利用上述的工具找出正確的字串輸入
   * 總共有 5 個階段,第 0 個階段是範例,密碼是``help``
   * 溫馨小提示,不同階段可以從不同的方向去想
      - 階段 1 - 比較
      - 階段 2 - 迴圈
      - 階段 3 - switch
      - 階段 4 - 遞迴

參考資料
   * `hwswinterface lab2<https://class.coursera.org/hwswinterface-002/assignment/view?assignment_id=7>`_

Lab2
-------------
目標:
   * 瞭解 buffer overflow 的原理,並且利用這項技巧攻擊程式

步驟:

.. code-block:: prettyprint linenums
.. code-block:: prettyprint

   $ git clone https://github.com/embedded2014/freertos-plus.git
   $ cd freertos-plus
   $ make
   $ echo "<Your codes here>" > exploit.str
   $ make exploit
   $ make qemu

   In the qemu shell
   $ bufbomb

..

程式說明:
   * bufbomb 會利用 semihosting 讀取由 ``make exploit`` 產生的 ``exploit.byte``
   * 觀察 ``bufbomb.c``,找出問題所在,輸入正確的 byte code
   * ``str2byte`` 這支程式會讀入 hex 並且轉換成二進位檔案,需要注意的是每一行 code 結尾必須是 ``0x0A('\n')``
   * 溫馨小提示
      - Level 1 - 利用 buffer overflow 覆蓋 local variable 的值
      - Level 2 - 利用 buffer overflow 覆蓋堆疊上 link register 的值
      - Level 3 - 插入一段 exploit code 並且利用 buffer overflow 覆蓋堆疊上 link register 的值,使其能夠跳轉至 exploit code 修改 global variable 的值
   * 在建立 exploit code 的時候可以先寫 C code,編譯後利用 objdump 將 machine code 取出

參考資料:
   * `hwswinterface lab3<https://class.coursera.org/hwswinterface-002/assignment/view?assignment_id=9>`_
   * `IA32 Linux Buffer Overflow<https://d396qusza40orc.cloudfront.net/hardware/lecture_slides/tutorials/buffoverflow.pdf>`_