为什么我们需要知道shellcode的地址?

逆向工程 拆卸 部件 数据库 缓冲区溢出 外壳代码
2021-06-14 03:01:23

我已经阅读了很多关于缓冲区溢出漏洞的文章。到处都写成如下。

“很难知道shellcode的起始地址”

为什么我们需要知道shellcode的地址?为什么 stack 不按原样执行 shellcode?

假设我们以这种方式注入我们的 shellcode

我们的 shellcode -- 一些填充 -- 我们选择保存的返回地址

shellcode 不应该被堆栈默认执行吗?为什么我们要添加 NOP 雪橇并使事情复杂化。

1个回答

通过在其内存中注入 shellcode 来利用软件始终需要以下步骤:

  1. 有一种方法可以将您的 shellcode 注入内存中(通常,它可以发生在程序的任何缓冲区中)。

  2. 重定向执行流程(即能够在 上写入rip)以指向 shellcode 并执行它(通常,它是通过缓冲区溢出完成的)。

如果您不确定 shellcode 的地址,eip则无法可靠地实现利用的第二部分( 的重定向)。