在创建这篇文章之前,我尝试并阅读了所有以前的问答,但他们似乎没有回答我的确切问题。
我也指的是下面链接上的指南,但我错过了一些重要的东西。
https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/
这是我到目前为止所做的,程序中存在缓冲区溢出,我计算出 EIP 和 EBP 的偏移量(使用 msf 工具)。分别是 267 和 263。
该程序要求我输入“42”作为第一个输入,然后它会提示另一个问题,我可以在其中给出 A*264 以溢出缓冲区。下面是我正在使用的有效负载,它包括字符串 42、一堆 NOP 雪橇(精确为 263)、保留 EBP 值、要在 EIP 和我的 shellcode 上覆盖的 ESP 内存偏移量(0xbffff480)。
执行上述操作后,在 gdb 中,当我看到 ESP 和 EIP 的值相同时,即 0xbffff480
这是我放置 shellcode 的地方,EIP 指向这个。但是,为什么我的 shellcode 没有被执行?它因“程序收到信号 SIGSEGV,分段错误”而失败。
我不确定我哪里出错了。所以我将 EIP 指向/覆盖到 ESP 值的想法是错误的?或者与我的shellcode有关?我如何编写一个简单的 shellcode/payload 来打印一些东西,或者只是检查是否正在执行?
更新:
我使用 checksec.sh 脚本检查二进制文件是否启用了 NX,下面是我得到的输出。
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH output
这是否意味着我无法运行我的 shellcode?我只需要专注于逃避/绕过 NX?- 部分 RELRO 有什么不同吗?