實現Return-to-libc
攻擊linux
retaddr+nop+shellcode
,nop+shellcode+retaddr
,緩衝區小就就把shellcode放後邊,否則就放前邊Return-to-libc
是緩衝區溢出的變體攻擊,這種攻擊不須要一個棧能夠執行,甚至不須要一個shelcode
,取而代之的是咱們讓漏洞程序調轉到現存的代碼(好比已經載入內存的lib庫中的system()函數等)來實現咱們的攻擊shell
編寫一段sellcode,文件保存名20145308shellcode
bash
安裝execstack
服務器
設置堆棧可執行,並查詢堆棧是否可執行,以便shellcode在堆棧上能夠執行
網絡
關閉地址隨機化,避免每次執行分配的內存地址不一樣
函數
採起nop+shellcode+retaddr
方式構造payload
(\x4\x3\x2\x1
將覆蓋到堆棧上的返回地址的位置,須要將它改成shellcode的地址)
學習
\x4\x3\x2\x1
處返回地址應該填什麼注入攻擊buf
操作系統
5308pwn
進程首先要找到5308pwn
進程號,找到5308
的進程號是2906
3d
啓動gdb調試進程,設置斷點,查看注入buf的內存地址
調試
設置斷點後,在另外一個終端按下回車,並尋找返回地址,看到01020304
表示返回地址的位置是0xffffd33c
,shellcode
就緊挨着這個地址,加四字節爲0xffffd340
退出gdb,按照anything+retaddr+nops+shellcode
修改input_shellcode
以下
成功
Return-to-libc
攻擊sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev
,安裝未成功,參照同窗博客,發現安裝與否沒有太大關係
進入32位linux環境,並使用bash
關閉地址空間隨機化
使用另外一個shell程序(zsh)代替/bin/bash
,設置zsh程序
編寫retlib.c
編譯程序,並設置SET-UID
須要用到一個讀取環境變量的程序:getenvaddr.c
編譯
編寫exploit.c
用剛纔的getenvaddr
程序得到BIN_SH
地址,0xffffdf43
gdb
得到system
和exit
地址編譯
gdb,獲得system
地址0xf7e2eb30
,exit
地址0xf7e227e0
修改exploit.c
文件,填上剛纔找到的內存地址
刪除剛纔調試編譯的exploit程序和badfile文件,從新編譯修改後的exploit.c
先運行攻擊程序exploit,生成了badfile文件,再運行漏洞程序retlib,可見攻擊成功,得到了root權限
Return-to-libc
的實驗,實現了在棧不可執行的狀況下,讓漏洞程序調轉到現存的代碼開始編譯exploit程序出錯,運行結果是攻擊程序和漏洞程序都是運行錯誤,後來發現本身寫代碼的時候把fopen
寫成了open
致使錯誤