2011-09-27 33 views
0

我的老師給了我一些代碼,我必須運行它並使其跳轉到使用緩衝區溢出的管理部分。我無法修改源代碼。有人可以解釋我如何使用緩衝區溢出跳轉到管理方法?我在Ubuntu 8.10上運行它,並使用舊版本的gcc進行編譯,因此溢出將起作用。緩衝區溢出跳轉到代碼的一部分

+2

對於http://security.stackexchange.com,這可能是一個更好的問題,因爲您沒有顯示任何代碼... –

+0

我已添加代碼 – functionalCode

+0

[緩衝區溢出幫助(學術目的)]的可能重複] (http://stackoverflow.com/questions/7563668/buffer-overflow-help-academic-purpose) –

回答

0

如果不能看到代碼,在一般的層次上,您需要設計函數的輸入,以覆蓋堆棧上返回地址(或函數傳遞控制的另一個地址)。

猜測,代碼具有固定長度的字符緩衝區,並將函數參數中的值複製到該緩衝區中,而不驗證該長度未超過緩衝區的長度。

你需要記下你的應用程序的堆棧佈局是什麼樣子(在調試器下運行它可能是最快的方法),找出你需要覆蓋的地址,然後把一起用一個字符串覆蓋這個你需要調用的管理函數的地址。

0

你總是可以得到它的asm輸出(我現在忘了怎麼...... brainfart)並查看你想要溢出的緩衝區在哪裏被使用/讀取並檢查它的長度。接下來,您需要計算需要溢出的距離,以便使用JMP(管理代碼的地址)替換下一條指令,或者將JMP地址更改爲管理部分的地址。 0xE8是x86的跳轉操作碼,如果您需要它,因爲您想用自己的指令覆蓋該指令的二進制數據。