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實驗,這個實驗真的是比較簡單了。但是挺有意思,你是不是躍躍欲試了,接下來就是開始吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章