【问题标题】:How can I find where main()'s return address is sitting in the stack?如何找到 main() 的返回地址在堆栈中的位置?
【发布时间】:2013-03-08 06:17:46
【问题描述】:

我需要为一个类做一个远程缓冲区溢出漏洞利用。我了解其中的大部分。它涉及覆盖 main 的返回地址,以便我可以执行自己的代码。 但是我们从来没有讨论过如何在内存中找到返回地址的位置...... 我一直弄错了,漏洞利用不起作用:(

我坐在 gdb 中,我有缓冲区的地址 (0xbffff3dc)

现在,我需要找出返回地址在堆栈中的位置(以便找出它与缓冲区之间的偏移量)。

那我就知道要加多少空间了:

  • 一个 NOP (0x90) “雪橇”
  • 我的shellcode
  • 更多 NOP ???
  • 我的缓冲区的地址(覆盖返回地址)
  • "\r\n" ???

^ 我不确定是否标记了“???”完全有必要。

【问题讨论】:

    标签: linux buffer-overflow exploit


    【解决方案1】:

    你或许可以使用objdump

    试试objdump -d your-executable,它会给你汇编代码和地址

    【讨论】:

    • 这对代码的地址有用,但对 main 的返回地址在堆栈中存储的位置没有用。这是我在 GDB 中发现的: - main@ 0xbffff384 中的第一个 var - arglist @ 0xbffff798 - argv @ 0xbffff834 - locals @ 0xbffff798 - 上一帧 @ 0xbffff7a0 - EBP = 0xbffff798 - EIP = 0xbffff79c 返回指针应位于 EBP 之前对吗?
    • 只是另一种运行 gdbdisas function。可以指定要禁用的功能
    猜你喜欢
    • 2011-02-09
    • 2011-02-02
    • 2014-04-21
    • 2010-12-14
    • 2021-09-09
    • 2017-02-24
    • 2012-06-26
    • 2020-09-23
    相关资源
    最近更新 更多