我有一个任务告诉我,我需要通过从堆栈运行代码来执行缓冲区溢出。我一直在尝试这样做,但每次我将堆栈的“ret”位置替换为我希望代码驻留的堆栈的位置时,它都会导致seg错误。如果我用物理.o文件中存在的地址(如物理汇编代码)替换“ret”位置,它可以正常工作。你不允许回到栈上的位置吗?我很困惑,如果你不能返回到堆栈地址,你可以用自己的汇编代码执行缓冲区溢出......(顺便说一下,我使用的是IA32小端机)。缓冲区溢出攻击 - 返回堆栈地址?
我的步骤:
- 溢出的32字符缓存器(将所有FF)
- 覆盖的%ebp位置(与存储在那里的实际值)
- 覆盖它上面的 “RET” 斑用堆栈中的地址而不是程序集文件中的地址
- 注入我的程序集字节码(我确保我在开始时添加nop指令以确保它以4字节的倍数完成)
- 运行
,这导致了赛格故障
我觉得这个任务,我们假设堆栈被标记为可执行文件(否则他们不会给我们像一个分配这个)。任何其他想法?谢谢。 – de1337ed 2012-02-19 21:10:26