我想了解这两种攻击之间的确切区别。根据我所了解的:
缓冲区溢出:它覆盖栈上的ret地址,使其指向代码的另一部分,其中插入了恶意代码。因此,我们需要修改程序的源代码才能实际执行攻击。
返回到Libc:这里不是修改源代码,而是使用由C库提供的运行时函数调用(比如打开一个shell)。在这里,用于函数调用的参数也会传递到覆盖缓冲区中,在栈的ret部分之后结束。
以上描述准确吗?
另外一个相关的问题是 - 是否可能在不修改原始程序的源代码的情况下发生缓冲区溢出攻击?可能是,如果我们编写一个新程序并允许它修改某些内存部分(即原始程序中的已损坏栈的新ret地址)。但是,我认为这可能是不可能的,因为内核中存在进程间提供的内存保护。
缓冲区溢出:它覆盖栈上的ret地址,使其指向代码的另一部分,其中插入了恶意代码。因此,我们需要修改程序的源代码才能实际执行攻击。
返回到Libc:这里不是修改源代码,而是使用由C库提供的运行时函数调用(比如打开一个shell)。在这里,用于函数调用的参数也会传递到覆盖缓冲区中,在栈的ret部分之后结束。
以上描述准确吗?
另外一个相关的问题是 - 是否可能在不修改原始程序的源代码的情况下发生缓冲区溢出攻击?可能是,如果我们编写一个新程序并允许它修改某些内存部分(即原始程序中的已损坏栈的新ret地址)。但是,我认为这可能是不可能的,因为内核中存在进程间提供的内存保护。