return-into-libc 實驗(報告)

實驗說明

return-into-libc 方式(又稱 arc injection)的 漏洞利用可以在不注入代碼的情況下達到 攻擊利用目的
– 使用已經存在代碼的地址覆蓋返回地址,通常 爲一個函數的地址及相應的參數,如 system()、 exec()等
– 當返回時,通過調用 system()、exec()等函數, 執行攻擊者指定的系統命令(函數參數中指定)
– 利用 return-into-libc 還可執行一系列函數

實驗環境:

系統環境:Linux localhost.localdomain 2.6.9-5.EL #1 Wed Jan 5 19:22:18 EST 2005 i686 i686 i386 GNU/Linux

Gdb 環境:GNU gdb Red Hat Linux (6.1post-1.20040607.62rh) Copyright 2004 Free Software Foundation, Inc.

實驗內容: 在調試情況下實現一個 return-into-libc 攻擊實例,調用 system()函數在當前目錄下創建一個文件

實驗操作:

1) 創建實驗代碼,並進行編譯註意,實驗前需要先輸入命令 sysctl –w kernel.exec-shield=0 //關閉地址隨機化。
Gcc 加入-ggdb 選項 #gcc –ggdb ret.c –o ret

2) gdb 調試階段,並利用找到系統函數地址。
Gdb ret 進入調試界面
在這裏插入圖片描述
Gdb b 6:
breakpoint 命令在第六行設置斷點。
gdb r :
運行到斷點。
根據實驗原理,預期棧的情況。
在這裏插入圖片描述
注意,由於本實驗具體操作時已經有 root 權限,故不需要構造運行 seteuid(0)函數。
Gdb p 分別查看 buff 及 ebp 地址(不一定緊跟 buff)和 ebp 地址裏保存的值 以及 return address

在這裏插入圖片描述

得到:
&Buff: 0xbffff83c; ebp 地址:0xbffff848 Ebp 指向地址: 0xbffff878
Return address:0x080483f2

繼續利用 gdb 找到系統函數 system()函數的首地址
在這裏插入圖片描述
接下來反彙編找到(leave/ret)address
在這裏插入圖片描述

得到:leave 語句首地址爲 0x08048388
同樣的,在棧內數出
System()函數參數的位置離首地址 16(return address 地址) + 3*4 = 28 字節的位置即&buff + 7(單位爲 4 個字節)

參數“touch a.txt”:

構造的 buff
在這裏插入圖片描述
結果截圖:
在這裏插入圖片描述
成功創建 hello 文件 ,完成漏洞攻擊!

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