1.實驗內容
本週我們學習了緩衝區溢位的基礎知識和一些案例。課上我們首先回憶了緩衝區的概念,隨後講解了緩衝區溢位的定義,以及例如蠕蟲病毒等案例。最後學習了緩衝區溢位基礎知識,例如編譯器和偵錯程式的使用,組合語言等知識。
具體實驗內容:
①手工修改可執行檔案,改變程式執行流程,直接跳轉到getShell函式。
②利用foo函式的Bof漏洞,構造一個攻擊輸入字串,覆蓋返回地址,觸發getShell函式。
③注入一個自己製作的shellcode並執行這段shellcode。
2.實驗過程
實驗內容一:直接修改程式機器指令,改變程式執行流程
①下載目標檔案20222402gbc,反彙編。
輸入程式碼:objdump -d 20222402gbc | more
圖中"call 8048491 "是彙編指令是說這條指令將呼叫位於地址8048491處的foo函式;main函式呼叫foo,對應機器指令為“ e8 d7ffffff”,讓它呼叫getShell,只要修改“d7ffffff”為“c3ffffff”,如下圖:
②輸入程式碼:cp 20222402gbc 20222402
vi 20222402
在vi中,按ESC鍵
:%!xxd
/e8d7
③修改d7為c3
:%!xxd -r
:wq
④反彙編,輸入程式碼:objdump -d 20222402 | more
實驗內容二:透過構造輸入引數,造成BOF攻擊,改變程式執行流
①反彙編,輸入程式碼:objdump -d 20222402gbc | more
找到目標觸發的函式getShell
②確認輸入字串哪幾個字元會覆蓋到返回地址
輸入程式碼:gdb 20222402gbc
③確認用什麼值來覆蓋返回地址
對比之前eip 0x34333231 0x34333231,正確應用輸入11111111222222223333333344444444\x7d\x84\x04\x08
④構造輸入字串
實驗內容三:注入Shellcode並執行
①準備工作
②構造要注入的payload,並注入這段攻擊buf
③另外一個終端,用gdb來除錯這個程序
找到程序號是:48787
④啟動gdb除錯這個程序,透過設定斷點,來檢視注入buf的記憶體地址
⑤在另外一個終端中按下回車
⑥計算返回地址
看到01020304就是返回地址的位置。所以shellcode地址是0xffffd3c0
⑦驗證結果
3.問題及解決方案
- 問題1:開啟gdb模式失敗。
- 問題1解決方案:按照終端提示的程式碼安裝gdb。
- 問題2:無法識別execstack。
- 問題2解決方案:在網上搜到了解決辦法,下載安裝包後拖入虛擬機器中,並安裝
- 問題3:構造要注入的payload時,找不到程序號。
- 問題3解決方案:注入這段攻擊buf後按一次enter。
4.學習感悟、思考等
在完成本次實驗的過程中,我接觸到了許多新的知識,也將之前的知識以具象的方式再次複習。在實驗準備前,如何安裝虛擬機器讓我有些茫然,隨後我在網上查閱了相關方法,在配置過程中,相繼解決了修改使用者名稱等問題,最終成功安裝。在實驗過程中,我參照了實驗指導書,從最初的毫無頭緒到現在的小有所獲,學會了細心的檢查程式碼並且計算驗證實驗結果。由於第一次接觸linux系統,對命令的功能有些陌生,但是我在學習和實踐的過程中,逐漸熟悉並加以利用,讓實驗得以完成,讓我很有成就感。
回顧我在實驗的收穫,我不僅在技術層面取得了顯著的進步,更重要的是,我的學習能力和解決問題的能力得到了極大的鍛鍊和提升。
參考資料
- 《【2024年最新版】Kali安裝詳細教程》
- execstack下載連結