利用foo函式的bof漏洞,構造乙個攻擊輸入字串,覆蓋返回位址,觸發getshell函式。
手工修改可執行檔案,改變程式執行流程,直接跳轉到getshell函式。
為了證明是在自己的虛擬機器上完成的這個實踐,我們需要把pwn1這個檔案弄成自己的學號,然後直接執行20145230即可。
隨後我們可以對這個檔案進行反彙編操作,檢視其指令,以及相應的指令位址。其中的more的作用就是讓螢幕在顯示滿一螢幕時暫停顯示。
main函式呼叫foo,對應機器指令為「 e8 d7ffffff」,那我們想讓它呼叫getshell,只要修改「d7ffffff」為,"getshell-80484ba"對應的補碼就行。用windows計算器,直接 47d-4ba就能得到補碼,是c3ffffff。
下面我們就修改可執行檔案,將其中的call指令的目標位址由d7ffffff變為c3ffffff。
接下來就對可執行檔案進行修改,先輸入指令vi 20145230,用vim編輯器檢視可執行檔案20145230;接著輸入:%!xxd,將顯示模式切換為16進製制模式;輸入/e8 d7查詢要修改的內容,按i鍵將模式改為插入模式,修改d7為c3;輸入:%!xxd -r轉換16進製為原格式,然後存檔退出。
最後我們再執行20145230這個檔案就能得到效果了。
進過嘗試發現,當輸入達到28位元組時產生溢位。
接下來我們通過gdb除錯來確認輸入字串的哪幾個字元會覆蓋到返回位址,輸入info r檢視各暫存器的值。
**eip的值,是ascii 1234,也就是說我們輸入的「1234」覆蓋了它的位址,所以我們只需要將getshell的記憶體位址替換這4個字元,就可以達到程式向getshell函式轉移的目的。
我們要構造一串特殊的輸入,由於getshell的記憶體位址是0x0804847d,而其對應的ascii沒有字元,所以我們通過乙個簡單的perl指令碼語言來構造輸入值。
然後將input的輸入,通過管道符「|」,作為可執行檔案20145230的輸入。
熊也有春天
其實,很久沒來這裡寫東西了。其實是這樣的,我輾轉騰挪,閃回了江蘇。開始了新的生活。練大字,看舊書,也許以後還要等熊媽媽回來。其實是這樣的,看了 兄弟 下,真不好看。找回上部看了一次,還是哭得稀里嘩啦的。宋凡平,你真牛b,乙個死人,折磨得我海海地哭。蘇童的 後宮 也看完了,我的帝王生涯 像天空的雲一樣...
度度熊回家
度度熊回家 時間限制 1秒 空間限制 32768k 乙個數軸上共有 n個點,第乙個點的座標是度度熊現在位置,第 n 1個點是度度熊的家。現在他需要依次的從 0號座標走到 n 1號座標。但是除了 0號座標和 n 1號座標,他可以在其餘的 n 2個座標中選出乙個點,並直接將這個點忽略掉,問度度熊回家至少...
度度熊回家
輸入乙個正整數n,n 50。接下來n個整數表示座標,正數表示x軸的正方向,負數表示x軸的負方向。絕對值小於等於100輸出描述 輸出乙個整數表示度度熊最少需要走的距離。輸入例子 4 1 4 1 3輸出例子 4思路 這題的關鍵在如何找到可以去除的那一點。考察連續的三個點,若三點的值都是遞增的,如,這樣,...