20222402 2024-2025-1 《網路與系統攻防技術》實驗一實驗報告

nonosuperman發表於2024-10-10

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下載連結

相關文章