發表文章

目前顯示的是 10月, 2016的文章

CMU buffer overflow attack作業筆記

圖片
三年前線上課程看到的,現在有空筆記一下,這是CMU的計算機組織課程的作業( https://www.cs.cmu.edu/~213/index.html ),應該是大二的課程。 作業可以在這邊載到( http://csapp.cs.cmu.edu/3e/labs.html ) 須要在x86–64的機器上執行.  作業給了一個有buffer overflow問題的程式bomb跟其原始碼bomb.c, 依難度大概有下面幾個層級 1.函數返回時利用buffer overflow去呼叫另一個不帶參數函數 2.函數返回時利用buffer overflow去呼叫另一個帶參數函數 3.利用buffer overflow去修改全域變數 4.最難的是利用buffer overflow去執行一段自己插入的程式(機器碼),然後要正常返回呼叫函數。 預備知識: 首先,先看x86–64 架構有什麼registers ,這邊 %rip:instruction pointer,用來指到下一個instruction的位置.  %rbp:Frame pointer,用來指到目前stack frame的開頭. %rsp:stack pointer,用來指到目前stack的top,也是尾巴。 sourece: Carnegie Mellon 1 Assembly and Bomb Lab 15-213: Introduction to Computer  x86的stack 是從高位往低位長的, 方向是rbp 往→ rsp ,caller呼叫函數時會把參數push(壓入)stack,接著呼叫函數,並把return的位址存在rbp+8的位置,接著把該含要用到的register值跟區域變數推入stack. 如下的程式Alpha呼叫Beta時,把引數23先推入stack,再呼叫Beta並先把返回位址推入stack. sourece: https://www.doc.ic.ac.uk/~herbert/teaching/CA05-Intel-5.pdf 題目一:函數返回時利用buffer overflow去呼叫另一個不帶參數函數 bomb程式有個函數test()會呼叫 g