版本 c5a5eae22deb8ae00c7af062e127bf9e218c670e
Lab43: Runtime Behavior
預期目標
- 複習 ARM 處理器和指令集,並深入 stack 和執行時期的行為
- 熟悉 objdump、gdb 等工具,並利用上述工具分析執行檔
Part 1
目標: * 利用 gdb 與 objdump 分析執行檔
步驟: 1. 下載作業檔案 (bomb.tar.gz) 2. 解壓縮後閱讀 README 查看執行方式,並且開始 Hacking!!
tar -xzvf bomb.tar.gz
cat README
使用 GDB 分析
- 假設 檔案 (bomb.tar.gz)
已經解開在
/tmp/bomb目錄,先開啟兩個終端機 - 在其中一個執行以下命令:
qemu-arm -g 1234 -L /usr/arm-linux-gnueabihf ./bomb
- 在另一個終端機執行以下命令:
arm-none-eabi-gdb ./bomb
- 在 gdb 的畫面中依序輸入以下命令:
target remote :1234b phase_0b phase_1b phase_2b phase_3info breakpointsc
- 切換到執行 QEMU 的終端機,可見到要求輸入字串,輸入
help並按下 Enter,這時可在 GDB 的視窗看到Breakpoint 1的訊息
程式說明 (上): * bomb
這支程式會從標準輸入讀取字串,請利用上述的工具找出正確的字串輸入 *
總共有 5 個階段,第 0 個階段是範例,密碼是help *
溫馨小提示,不同階段可以從不同的方向去想 - 階段 1 - 比較 - 階段 2 - 迴圈
- 階段 3 - switch - 階段 4 - 遞迴
程式說明 (下): 1. 下載檔案 (bomb2.tar.gz),其餘步驟同上 2. 提示:回顧並熟悉上方及之前上課的內容
參考資料 * hwswinterface lab2 (請先註冊 Coursera 帳號並登入) * Lab34: Buffer overflow * Debugging with GDB (入門篇) * 一個練習組合語言的小遊戲 – Defusing bomb (part 1)
Part 2
目標: * 瞭解 buffer overflow 的原理,並且利用這項技巧攻擊程式
步驟:
- 假設 Lab-39 的 qemu_stm32 放在
$HOME/workspace目錄下
.. code-block:: prettyprint
cd ~/workspace git clone https://github.com/embedded2015/freertos-bufbomb.git || git clone git@github.com:embedded2015/freertos-bufbomb.git cd freertos-bufbomb && make echo “” > exploit.str make exploit make qemu
在 FreeRTOS shell (QEMU 視窗),輸入以下命令:
bufbomb
程式說明: * bufbomb 會利用 ARM
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 (請先註冊 Coursera 帳號並登入) * IA32 Linux Buffer Overflow * 一個練習組合語言的小遊戲 – Defusing bomb (part 2)
繳交作業
- 截止日期:
- May 2, 2015 (含) 之前
- 更新解題過程到共筆網站: Lab 43 / 作業共筆,需要標注自己的 ID
