代码之家  ›  专栏  ›  技术社区  ›  James Raitsev

攻击堆栈

  •  1
  • James Raitsev  · 技术社区  · 14 年前

    二进制文件接受大小为“n”的字节数组,不检查边界。整个任务实际上是使缓冲区溢出并导致不好的事情发生。

    另外,为了让我得到要执行的地址,我想说“呼叫123”。据我所知“呼叫”是“e8”,不是吗?

    这个问题让我有点困惑。如果有人能帮助我更好地理解它,我将非常感激

    (是的,这是一个家庭作业问题)

    3 回复  |  直到 14 年前
        1
  •  4
  •   Adam Rosenfield    14 年前

    我强烈建议你读 Smashing the Stack for Fun and Profit . 它非常详细地描述了您需要执行的步骤。

        2
  •  1
  •   Forrest Voight    14 年前

    堆栈不包含代码,但包含函数的返回地址。典型的堆栈结构是:

    <stack data> <old frame pointer> <return address>
    

    <old frame pointer> 123 .

        3
  •  0
  •   ruslik    14 年前

    call ESP 操作码在一个固定的内存地址,并用这个地址覆盖返回地址。这样,执行将在堆栈上继续。如果没有DEP激活(或支持),它将工作。

    在你的情况下,你也可以寻找 abs_jump 123 在记忆中。

    @洛伦只有在堆栈可以执行的情况下它才能工作。 call esp 只有两个字节的操作码,所以很有可能在内存中找到它。第二种方法不是从堆栈执行代码,而是需要5字节的操作码,这是很难找到的。