我已经阅读了很多关于缓冲区溢出漏洞的文章。到处都写成如下。
“很难知道shellcode的起始地址”
为什么我们需要知道shellcode的地址?为什么 stack 不按原样执行 shellcode?
假设我们以这种方式注入我们的 shellcode
我们的 shellcode -- 一些填充 -- 我们选择保存的返回地址
shellcode 不应该被堆栈默认执行吗?为什么我们要添加 NOP 雪橇并使事情复杂化。
我已经阅读了很多关于缓冲区溢出漏洞的文章。到处都写成如下。
“很难知道shellcode的起始地址”
为什么我们需要知道shellcode的地址?为什么 stack 不按原样执行 shellcode?
假设我们以这种方式注入我们的 shellcode
我们的 shellcode -- 一些填充 -- 我们选择保存的返回地址
shellcode 不应该被堆栈默认执行吗?为什么我们要添加 NOP 雪橇并使事情复杂化。
通过在其内存中注入 shellcode 来利用软件始终需要以下步骤:
有一种方法可以将您的 shellcode 注入内存中(通常,它可以发生在程序的任何缓冲区中)。
重定向执行流程(即能够在 上写入rip)以指向 shellcode 并执行它(通常,它是通过缓冲区溢出完成的)。
如果您不确定 shellcode 的地址,eip则无法可靠地实现利用的第二部分( 的重定向)。