利用foo函式的bof漏洞,構造乙個攻擊輸入字串,覆蓋返回位址,觸發getshell函式。
手工修改可執行檔案,改變程式執行流程,直接跳轉到getshell函式。
其實我們還可以做的更多,比如說注入乙個自己製作的shellcode並執行這段shellcode。
根據上圖易知,程式通過main函式入口開始執行**,然後main函式會呼叫foo函式(功能為:將使用者輸入的字元回顯在螢幕上),其中還有乙個沒有呼叫的getshell函式(功能為:開啟乙個可用shell),顯然如果程式正常執行,是不會執行getshell函式部分的,而我們就是要通過修改程式機器指令,達到改變程式執行流程的目的。
root@kaliyl:~# objdump -d pwn1 | more
0804847d :
804847d: 55 push %ebp
...08048491 :
8048491: 55 push %ebp
...080484af :
...80484b5: e8 d7 ff ff ff call 8048491 80484ba: b8 00 00 00 00 mov $0x0,%eax
...
step4:%! xxd -r
,退出16進製制模式(注意:此處如果直接以16進製制形式儲存退出,執行該檔案會報錯)
step5::wq!
,儲存並退出。
此時,我們可以再用反彙編指令檢視其機器碼,不難發現此時已經改變了原**。
退出到終端,執行指令:./20145221
,結果如下:
現在能明確該程式有bof了,接下來我們接著往後輸入,觀察什麼時候可以覆蓋其返回位址,讓程式呼叫完foo函式後走向getshell函式,就能達到目的了。在此,我們使用用gdb除錯工具。
不難發現,此時「1234」覆蓋了其新的eip,所以我們只需要將getshell的記憶體位址替換這4個字元,就可以達到程式向getshell函式轉移的目的。
構造一串特殊的輸入,由於getshell的記憶體位址是0x0804847d
,而其對應的ascii沒有字元,所以我們通過乙個簡單的perl指令碼語言來構造輸入值。
(cat input; cat) | ./20145221
,將input檔案作為輸入,結果如下:
20145329 《網路對抗技術》PC平台逆向破解
實踐是在非常簡單的乙個預設條件下完成的 1 關閉堆疊保護 2 關閉堆疊執行保護 3 關閉位址隨機化 4 在x32環境下 5 在linux實踐環境 shellcode概念 shellcode是一段用來獲取互動式shell的機器指令 x4 x3 x2 x1為大致估計的資料溢位並將覆蓋到堆疊上的返回位址的...
20155232《網路對抗》Exp7 網路欺詐防範
本實踐的目標理解常用網路欺詐背後的原理,以提高防範意識,並提出具體防範方法。具體實踐有 1 簡單應用set工具建立冒名 1分 2 ettercap dns spoof 1分 3 結合應用兩種技術,用dns spoof引導特定訪問到冒名 1.5分 netstat tupln grep 80指令檢視80...
2015511《網路對抗》網路欺詐技術防範
ping通kali和靶機 因為之後用apache會用到80埠,所以先檢視80埠是否被占用,netstat tupln grep 80,如果有可以用kill 程序號殺死這兩個程序,再次檢視80埠占用情況,沒有被占用的程序 用vi開啟 etc apache2 ports.conf,檢視配置檔案中的監聽埠...