1. 程式人生 > 其它 >20211903 2021-2022-2 《網路攻防實踐》實踐九報告

20211903 2021-2022-2 《網路攻防實踐》實踐九報告

1.實踐內容

本次實踐的物件是一個名為pwn1的linux可執行檔案。
該程式正常執行流程是:main呼叫foo函式,foo函式會簡單回顯任何使用者輸入的字串。
該程式同時包含另一個程式碼片段,getShell,會返回一個可用Shell。正常情況下這個程式碼是不會被執行的。我們實踐的目標就是想辦法執行這個程式碼片段。我們將學習兩種方法執行這個程式碼片段,然後學習如何注入執行任何Shellcode。
三個實踐內容如下:

  1. 手工修改可執行檔案,改變程式執行流程,直接跳轉到getShell函式。
  2. 利用foo函式的Bof漏洞,構造一個攻擊輸入字串,覆蓋返回地址,觸發getShell函式。
  3. 注入一個自己製作的shellcode並執行這段shellcode。

2.實踐過程

  1. 手工修改可執行檔案,改變程式執行流程,直接跳轉到getShell函式。

首先將雲班課中的pwn1檔案下載到kali攻擊機中。

在終端中進入pwn1可執行檔案所在的資料夾,使用指令objdump -d pwn1 | more 檢視pwn1檔案的詳細工作流程,反編譯檢視它的組合語言程式碼。

可以在程式碼中找到foo、getShell、和main函式,並可以在main函式中可以看到,在080484b2這個儲存單元儲存的程式碼中,轉到了foo函式,如果想實現程式跳轉到getShell函式中,可以將這一行指定的跳轉到的儲存單元改為getShell第一行程式碼所在的儲存單元,即0804847d。

因為foo函式的首行儲存單元08048491與getShell首行儲存單元08048491相減差為14,有網上搜索可得call指令要跳轉的絕對位置=call指令或跳轉指令的下一條指令的地址-eip指標儲存的記憶體地址,在文中即體現為080484ba-08048491=ffffffd7,與之前程式碼中的e8d7ffffff相對應,所以ffffffd7-14=ffffffc3,所以應把08484b5這一行的e8d7ffffff改為e8c3ffffff,即可將跳轉到foo函式的程式改到跳轉至getShell函式。
經過計算後,得到需要修改的內容。使用vim pwn1指令編輯pwn1檔案,因為初始為ascii碼顯示,所以需要輸入:%!xxd轉換為16進位制輸出。

通過以上分析,只需要將此處的d7改為c3,即可實現更改,再更改後使用:%!xxd -r指令儲存更改並還原原格式。


再次objdump -d pwn1 | more,反編譯pwn1檔案,看看是否已經更改跳轉方向,由圖中可知已經修改跳轉成功,已修改為0804847d,所以可知第一個實驗內容完成。

2.利用foo函式的Bof漏洞,構造一個攻擊輸入字串,覆蓋返回地址,觸發getShell函式。

此次任務的目的是構造一個使用者輸入的字串,利用foo中的gets函式的不檢測使用者輸入字串長度的特性來實現緩衝區溢位的漏洞,將foo函式的返回地址進行覆蓋,從而將程式跳轉到getShell函式的首行。

3.學習中遇到的問題及解決

  • 問題1:XXXXXX
  • 問題1解決方案:XXXXXX
  • 問題2:XXXXXX
  • 問題2解決方案:XXXXXX - ...

4.實踐總結

xxx xxx