2018-2019-2 網絡對抗技術 20165320 Exp1 PC平臺逆向破解

學到的新知識總結

  • 管道:符號爲| 前一個進程的輸出直接做爲後一個進程的輸入
  • 輸出重定向:符號爲> 將內容定向輸入到文件中
  • perl:一門解釋性語言,不須要預編譯,直接在命令行中使用。常與輸出重定向">"將生成的字符串存儲到文件input中。
  • xxd:16進制查看命令
  • objdump:反彙編

實驗過程

一、修改機器指令,改變程序執行流程

  • 首先將目標文件pwn1進行反彙編,可以看到相關的彙編代碼。
    shell

  • 其中main函數中有一條call指令,後面本來接的是foo函數的起始地址dom

  • 爲了能讓程序在執行時直接跳到shellcode,咱們須要修改調用foo函數時的機器指令,只要修改「d7ffffff」爲,"getShell-80484ba"對應的補碼就行。以下圖所示
    函數

  • 執行結果以下:

二、經過構造輸入參數,形成BOF攻擊

  • 這種攻擊主要是經過緩衝區的數據溢出致使原函數的返回地址被Shellcode的起始地址所覆蓋。spa

  • 首先咱們須要對程序進行GDB調試,查看輸入的字符串到第幾個字節會發生溢出。(小端機器)
    命令行

  • 而後構造一個輸入,將Shellcode代碼的地址覆蓋到相應的位置。這時須要用到perl指令。如圖
    3d

  • 執行結果以下:調試

三、注入Shellcode並執行

  • 準備工做以下:code

    • 設置堆棧可執行 execstack -s 設置堆棧可執行blog

    • execstack -q 查詢文件的堆棧是否可執行教程

    • 關閉地址隨機化

      more /proc/sys/kernel/randomize_va_space 2

      echo "0" > /proc/sys/kernel/randomize_va_space

      more /proc/sys/kernel/randomize_va_space 0
  • 經常使用的構造攻擊buf的方法

    • retaddr+nop+shellcode (緩衝區小)

    • nop+shellcode+retaddr (緩衝區大)

  • 實驗首先相似上一個實驗構造一個輸入,而後用gdb進行調試,對foo函數進行反彙編,在ret指令處設置斷點,等待程序繼續運行時查看ESP中的值。(一開始按照老師的教程走了一遍,發現原來還有坑,心塞)

  • ESP的值+4就是Shellcode的地址,再將其寫入一開始的攻擊buf,執行程序就能攻擊成功。

四、老師問題

  • NOP:NOP指令即「空指令」。執行到NOP指令時,CPU什麼也不作,僅僅當作一個指令執行過去並繼續執行NOP後面的一條指令。(機器碼:90)
  • JNE:條件轉移指令,若是不相等則跳轉。(機器碼:75)
  • JE:條件轉移指令,若是相等則跳轉。(機器碼:74)
  • JMP:無條件轉移指令。段內直接短轉Jmp short(機器碼:EB)  段內直接近轉移Jmp near(機器碼:E9) 段內間接轉移 Jmp word(機器碼:FF)  段間直接(遠)轉移Jmp far(機器碼:EA)
  • CMP:比較指令,功能至關於減法指令,只是對操做數之間運算比較,不保存結果。cmp指令執行後,將對標誌寄存器產生影響。其餘相關指令經過識別這些被影響的標誌寄存器位來得知比較結果。 

  • 實驗感想

    • 我以爲此次實驗對於我來講仍是挺難的吧,第三個實驗的細節還有待琢磨,雖然能按照步驟達成最終的目的,可是得把過程細化,理清思路才行。堆棧的結構還有地址的存儲還有待增強理解。
相關文章
相關標籤/搜索