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