20145308 《網絡對抗》 注入shellcode+Return-to-libc攻擊 學習總結

20145308 《網絡對抗》 逆向及BOF進階實踐 注入shellcode+Return-to-libc攻擊 學習總結

實踐目的

  • 注入shellcode
  • 實現Return-to-libc攻擊linux

    知識點學習總結

  • Shellcode實際是一段代碼(也能夠是填充數據),是用來發送到服務器利用特定漏洞的代碼,通常能夠獲取權限。另外,Shellcode通常是做爲數據發送給受攻擊服務器的。 Shellcode是溢出程序和蠕蟲病毒的核心,提到它天然就會和漏洞聯想在一塊兒
  • Linux中兩種基本構造攻擊buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,緩衝區小就就把shellcode放後邊,否則就放前邊
  • Return-to-libc是緩衝區溢出的變體攻擊,這種攻擊不須要一個棧能夠執行,甚至不須要一個shelcode,取而代之的是咱們讓漏洞程序調轉到現存的代碼(好比已經載入內存的lib庫中的system()函數等)來實現咱們的攻擊shell

    實踐過程

    shellcode的注入

  • 編寫一段sellcode,文件保存名20145308shellcode
    bash

  • 安裝execstack
    服務器

  • 設置堆棧可執行,並查詢堆棧是否可執行,以便shellcode在堆棧上能夠執行
    網絡

  • 關閉地址隨機化,避免每次執行分配的內存地址不一樣
    函數

  • 採起nop+shellcode+retaddr方式構造payload\x4\x3\x2\x1將覆蓋到堆棧上的返回地址的位置,須要將它改成shellcode的地址)
    學習

  • 肯定\x4\x3\x2\x1處返回地址應該填什麼
  • 注入攻擊buf
    操作系統

  • 另開一個終端,用gdb調試5308pwn進程
  • 首先要找到5308pwn進程號,找到5308的進程號是2906
    3d

  • 啓動gdb調試進程,設置斷點,查看注入buf的內存地址
    調試

  • 設置斷點後,在另外一個終端按下回車,並尋找返回地址,看到01020304表示返回地址的位置是0xffffd33cshellcode就緊挨着這個地址,加四字節爲0xffffd340

  • 退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode以下

  • 成功

Return-to-libc攻擊

  • 輸入命令安裝一些用於編譯32位C程序的東西
  • 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

  • 上述程序有一個緩衝區溢出漏洞,它先從一個叫「badfile」的文件裏把 40 字節的數據讀取到 12 字節的 buffer,引發溢出。fread()函數不檢查邊界因此會發生溢出。因爲此程序爲 SET-ROOT-UID 程序,若是一個普通用戶利用了此緩衝區溢出漏洞,他有可能得到 root shell。應該注意到此程序是從一個叫作「badfile」的文件得到輸入的,這個文件受用戶控制。如今咱們的目標是爲「badfile」建立內容,這樣當這段漏洞程序將此內容複製進它的緩衝區,便產生了一個 root shell
  • 須要用到一個讀取環境變量的程序:getenvaddr.c

  • 編譯

  • 編寫exploit.c

  • 用剛纔的getenvaddr程序得到BIN_SH地址,0xffffdf43

  • gdb得到systemexit地址
  • 編譯

  • gdb,獲得system地址0xf7e2eb30exit地址0xf7e227e0

  • 修改exploit.c文件,填上剛纔找到的內存地址

  • 刪除剛纔調試編譯的exploit程序和badfile文件,從新編譯修改後的exploit.c

  • 先運行攻擊程序exploit,生成了badfile文件,再運行漏洞程序retlib,可見攻擊成功,得到了root權限

    其餘

  • 剛開始的時候,感受進階實驗很難,不敢動手,通過老師上課講解以後,決定嘗試一次,最後成功作出了實驗,也經過實驗對shellcode注入部分的知識有必定的瞭解
  • 可是實驗是在關閉地址隨機化和設置堆棧可執行等前提下進行的,在現實裏基本沒有類似的狀況,操做系統都會實施措施保護計算機,因此還須要進階學習
  • 進階學習,選擇了Return-to-libc的實驗,實現了在棧不可執行的狀況下,讓漏洞程序調轉到現存的代碼
  • 開始編譯exploit程序出錯,運行結果是攻擊程序和漏洞程序都是運行錯誤,後來發現本身寫代碼的時候把fopen寫成了open致使錯誤

相關文章
相關標籤/搜索