2011-09-27 60 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的跳转操作码,如果您需要它,因为您想用自己的指令覆盖该指令的二进制数据。