20145211《網絡對抗》注入Shellcode並執行&&Return-to-libc攻擊

Shellcode注入

基礎知識

  • Shellcode實際是一段代碼,但卻做爲數據發送給受攻擊服務器,將代碼存儲到對方的堆棧中,並將堆棧的返回地址利用緩衝區溢出,覆蓋成爲指向 shellcode的地址。

實踐過程

    • shellcode的生成方法指導書上已經寫得很詳細了,在作實驗時我直接用的是老師上課用的shellcode:
      linux

    • 將環境設置爲:堆棧可執行、地址隨機化關閉
      shell

    • 選擇anything+retaddr+nops+shellcode的結構構造攻擊buf,先猜想返回地址所在位置,而且找到shellcode所在地址
      服務器

    • 在終端注入這段攻擊buf:
      函數

    • 先不輸入「回車」,在後面的調試過程當中須要繼續運行的時候再回車,此時再打開另一個終端,用gdb來調試20145215pwn1這個進程,先找到該進程的進程ID,再打開gdb,用attach指令對該進程進行調試:
      ui

    • foo函數進行反彙編:
      3d

    • ret處設置斷點,接着繼續運行到斷點處,顯示當前esp的值並依照此位置顯示接下來的內存地址內容,來分析咱們以前猜想的返回地址位置是否正確以及shellcode的地址,然而我一開始一直沒有找到,如同見鬼,再修改無數次後在勉強找到調試


    • 由上圖能夠看出,第一個紅色方塊中的內容是咱們以前猜想返回地址而輸入的值,第二個方塊中的內容則是shellcode代碼,由此咱們能夠推斷出shellcode地址爲:0xffffd3d4
    • 繼續運行,如紅色方塊中所示,能夠確認返回地址是被咱們以前輸入的\x01\x02\x03\x04所覆蓋的:
      code

    • 將返回地址修改成0xffffd3d4,從新注入,蒼天啊,終於成功了
      blog

Return-to-libc攻擊實驗

實驗內容

  • return-to-libc實驗是一個基於緩衝區溢出攻擊實驗的基礎上的一種攻擊實驗
  • 緩衝區溢出攻擊相關知識:
    • 原理:經過一段包含shellcode以及shellcode地址的長字符串注入到程序中,以shellcode地址來覆蓋程序原有的返回地址,從而讓目標程序來執行咱們的shellcode,以此達到攻擊目的
    • 保護措施:爲了防止緩衝區溢出攻擊,如今經常使用的保護措施有兩種,一是設置堆棧不可執行,漏洞程序在執行注入到堆棧中的shellcode時就會發生程序崩潰。二是代碼生成地址隨機化,以此來使得攻擊者沒法準確得知shellcode的地址
  • return-to-libc攻擊原理:
    • 爲了避開堆棧不可執行的問題,return-to-libc攻擊放棄了讓漏洞程序執行堆棧中的shellcode,而是跳轉到已經存在的代碼(例如libc庫中的system函數)來完成攻擊

實踐過程

  • 首先添加用戶hzy

  • 進入32位linux環境,將地址隨機化關閉,而且把/bin/sh指向zsh
    進程

  • 將漏洞程序保存在/tmp目錄下:



  • 編譯該代碼,使用–fno-stack-protector來關閉阻止緩衝區溢出的棧保護機制,並設置給該程序的全部者以suid權限,能夠像root用戶同樣操做:

  • 讀取環境變量的程序:

    • 將攻擊程序保存在/tmp目錄下:  
  • 用剛纔的getenvaddr程序得到BIN_SH地址,利用gdb得到systemexit地址:

 

  • 將上述所找到的三個內存地址填寫在20145211exploit.c中:

  • 刪除剛纔調試編譯的20145211exploit程序和badfile文件,從新編譯修改後的20145215exploit.c,gcc -m32 -o 20145211exploit 20145211exploit.c
    先運行攻擊程序20145211exploit,再運行漏洞程序20145211retlib,攻擊成功,得到了root權限,ls一波:

  •  

 

實踐思考

  • 對普通緩衝區溢出攻擊的防護,一方面須要學會使用可以防止緩衝區溢出的函數,警戒攻擊的發生。另外一方面,能夠在系統中開啓相似數據執行保護機制(DEP)這樣的防禦機制,這樣被保護程序的內存使其不能同時被寫和被執行,從而防止了代碼注入式的緩衝區溢出攻擊。可是,這些不能有效抵禦 return-into-libc ,所以還須要進一步的解決方案。
  • 目前對於 return-into-libc 攻擊,比較好的解決方法是地址空間隨機化 ,增長了攻擊者成功發起攻擊的難度,同時更容易致使攻擊時程序運行的崩潰,使得檢測機制也更容易檢測到此種攻擊。
相關文章
相關標籤/搜索