據我所知,溢流開發需要三個步驟:堆溢出攻擊
1.Injecting任意代碼(shellcode的)轉換成目標進程的內存空間。
2.對eip進行控制。
3.設置eip執行任意代碼。
我閱讀本hawkens大約堆開發的文章,並瞭解有關如何ultimatly重載函數指針指向我的代碼一些戰術。
換句話說,我明白步驟2
我不明白的步驟1和3
如何注入我的代碼進程的內存空間?
在第3步我重寫了 指向我的shellcode的函數指針,我如何計算\知道的是我注入的代碼注入什麼地址 成? 。(此問題是通過使用「JMP ESP解決 在計算器)
我明白了。你可以給我一個關於如何在堆溢出的情況下找到shellcode地址的例子嗎? – Michael
不,我沒有製造病毒的習慣,所以我從來沒有打擾過這樣做。 –
網上有很多方法。例如,以 爲例。有時你無法精確地控制eip的位置,因此人們用覆蓋大量內存(搜索該詞)的「nop sleds」,希望當他們隨機切換內存時,他們將nop sled滑向下滑到利用。有時堆溢出(不只是溢出)會導致任意寫入4字節..(所以如果你知道堆棧地址,你可以覆蓋返回的eip)。與緩衝區溢出相比,堆棧漏洞利用有點牽涉其中。 – Dan