我有一個任務告訴我,我需要通過從堆棧運行代碼來執行緩衝區溢出。我一直在嘗試這樣做,但每次我將堆棧的「ret」位置替換爲我希望代碼駐留的堆棧的位置時,它都會導致seg錯誤。如果我用物理.o文件中存在的地址(如物理彙編代碼)替換「ret」位置,它可以正常工作。你不允許回到棧上的位置嗎?我很困惑,如果你不能返回到堆棧地址,你可以用自己的彙編代碼執行緩衝區溢出......(順便說一下,我使用的是IA32小端機)。緩衝區溢出攻擊 - 返回堆棧地址?
我的步驟:
- 溢出的32字符緩存器(將所有FF)
- 覆蓋的%ebp位置(與存儲在那裏的實際值)
- 覆蓋它上面的 「RET」 斑用堆棧中的地址而不是程序集文件中的地址
- 注入我的程序集字節碼(我確保我在開始時添加nop指令以確保它以4字節的倍數完成)
- 運行
,這導致了賽格故障
我覺得這個任務,我們假設堆棧被標記爲可執行文件(否則他們不會給我們像一個分配這個)。任何其他想法?謝謝。 – de1337ed 2012-02-19 21:10:26