1. 程式人生 > >CSAPP 深入理解計算機系統 Buflab實驗,緩衝區溢位攻擊實驗(1)

CSAPP 深入理解計算機系統 Buflab實驗,緩衝區溢位攻擊實驗(1)

由於實驗太長所以還是採用分開

其實感覺之前做過那個bomb實驗以後,這個實驗相對來說還是很容易的,主要是要搞懂緩衝區溢位原理,以及堆疊的過程,函式呼叫的實現過程,做完這個實驗如果認認真真的做完,對於堆疊的過程,還有快取溢位攻擊的原理就會掌握的比較清楚的。個人感覺實驗設計的還是非常的好的,非常值得做一做。做這個實驗首先是要建立在bomb實驗和對函式呼叫棧過程的基礎上,如果你覺得你理解起來有困難,建議先補充這方面的知識,我的部落格中也有專門的相關文章。

和之前做實驗一樣,首先把buflab-handout.tar.gz資料夾拖到我們的虛擬機器的csapp資料夾下面。這裡由於我之前做實驗的時候已經解壓過了,我們先刪掉從頭開始。


首先將檔案進行解壓,這裡問價是.tar.gz格式的,先解壓


解壓以後在檢視一下里面有些什麼:通過ll看到裡面的檔案都是可執行的


這裡可以看到解壓以後裡面一共就三個檔案,結合實驗指導書,

這三個檔案的作用是:


可以看到bufbomb就是一個有緩衝區溢位漏洞的程式,makecookie就是一個可以根據使用者不同的userid生成的唯一的cookie,這個主要是說學生的userid不同,cookie不同,所要解決的方法就不同,所以接下來實驗我都是用的我自己的userid:syq生成的cookie做的實驗,你用你自己的userid時,答案跟我的是不同的。然後hex2raw的作用是使你編寫的緩衝區利用程式碼的轉換為一個字串的格式,只有經過轉換以後才可以輸入到getbuf中,因為本身test函式就是需要你輸入字串格式的,如果你直接輸入你的漏洞利用程式碼是不可以的。也就是說你每次編寫的漏洞利用程式碼都要經過這個檔案進行一下轉換再輸入到bufbomb中。

接下來首先先將bufbomb這個程式通過objdump進行反彙編,生成其彙編程式碼進行檢視。


和前一個bomb實驗一樣,我們可以把bufbomb.s檔案拖到windows中用notepad++以組合語言的格式進行檢視。

接下來根據自己的userid來生成一個cookie,因為每次執行bufbomb時要用到。


整個實驗是針對getbuf具有的漏洞展開的,getbuf函式類似於gets函式,它是讀入一段字串,字串以\n或者eof表示結束,並把儲存起來,但是getbuf提供的緩衝區只有32個字元大小,但是getbuf本身又對輸入的字元是否超過緩衝區大小進行安全檢查,從而帶來了緩衝區溢位漏洞。以下就是getbuf函式的程式碼:


接下來是輸入的字串在31個字元之內和超出了31字元時(32個字元但是還有結束佔一個字元)


可以看到超出的時候就會造成段錯誤,多出buf的部分就會導致程式的狀態被重寫,我們正好就可以利用這個漏洞,來編寫我們的漏洞利用程式碼exploit string。

看一下bufbomb的不同的引數的含義。主要用到的就是-u,確保不同的userid用不同的cookie,然後就是-n是為了level4,棧基址隨機化模式的時候使用的。-s是上傳到伺服器進行打分,這個部分是沒有的。



然後我們可以把我們的exploit寫到一個txt中,然後給出了幾種將我們的txt執行的格式:


Cat主要是多次提交我們的txt,主要是在level4中會用到,因為level4要求你連續輸入5次你的string。

然後是一些比較重要的提示事項:


一個是getbuf遇到換行就會認為輸入停止,而換行\n的對應的ASCII值是0x0a,所以不可以輸入的字串中含有0x0a

另一個就是說,格式轉換要注意每次輸入的都是兩個數字,比如你要輸入0,就要輸入00。

還有要注意小端格式的輸入。

其實感覺實驗提供的說明文件說的好清楚,再加上之前做過那個bomb實驗,這個實驗真的是比較簡單了。但是挺有意思,你是不是躍躍欲試了,接下來就是開始吧。