我想了解这两种攻击类型之间的确切区别。从我已阅读:- 缓冲区溢出和返回到libc攻击之间的区别
缓冲区溢出:它覆盖栈上的RET地址为指向恶意代码插入代码的另一部分。非常有效 - 在这里我们需要修改程序的源代码以实际执行攻击。
返回Libc-这里不是修改源代码,由C库提供运行时功能调用用来(说打开一个shell)。这里用于函数调用的参数也在覆盖缓冲区中传递,最终在堆栈的ret部分之后结束。
以上是一个准确的描述吗?
而另一个相关的问题 - 这将是可能有,而不真正修改原始程序的源代码中的缓冲区溢出攻击?如果我们编写一个新程序并允许修改某些内存段(这是原始程序损坏的堆栈中新的ret地址),那可能就是这种情况。再次,我认为这可能是不可能的,因为内核中的进程之间提供了内存保护。
你能解释一下你的意思 - 让存储可执行文件(或不可执行)。另一个疑问(我原来的问题的一部分)是 - 我相信C代码将无法访问主内存的所有部分。那么如何确定恶意汇编代码在内存中的位置呢?因为我认为对于大多数记忆区域 - 在返回时只会标记分段错误。 – Hari
您插入的漏洞利用代码的核心通常是使用和exec()系列风格的函数。这意味着,通过给它提供适当的参数,你可以让它产生一个/ bin/sh shell作为root用户。这是*正在执行*一个程序,你不能再做了。有许多不同的安全措施,但这种人会被描述,例如,在 – gnometorule
http://en.wikipedia.org/wiki/NX_bit – gnometorule