|
前一個進程的輸出直接做爲後一個進程的輸入>
將內容定向輸入到文件中首先將目標文件pwn1進行反彙編,可以看到相關的彙編代碼。
shell
其中main函數中有一條call指令,後面本來接的是foo函數的起始地址dom
爲了能讓程序在執行時直接跳到shellcode,咱們須要修改調用foo函數時的機器指令,只要修改「d7ffffff」爲,"getShell-80484ba"對應的補碼就行。以下圖所示
函數
這種攻擊主要是經過緩衝區的數據溢出致使原函數的返回地址被Shellcode的起始地址所覆蓋。spa
首先咱們須要對程序進行GDB調試,查看輸入的字符串到第幾個字節會發生溢出。(小端機器)
命令行
而後構造一個輸入,將Shellcode代碼的地址覆蓋到相應的位置。這時須要用到perl指令。如圖
3d
執行結果以下:調試
準備工做以下: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,執行程序就能攻擊成功。
CMP:比較指令,功能至關於減法指令,只是對操做數之間運算比較,不保存結果。cmp指令執行後,將對標誌寄存器產生影響。其餘相關指令經過識別這些被影響的標誌寄存器位來得知比較結果。
實驗感想