我希望为教育目的利用基于堆栈的缓冲区溢出。
有一个典型的函数从主函数中调用,该函数使用从程序输入的参数作为本地缓冲区,并将参数保存在其中。如果给定一个这样的输入:nops+shellcode+address_shellcode
,我将利用它。
通过gdb调试,我找到了shell code的地址,因为它将作为参数传递,并且在strcpy
之后,我检查了堆栈和$ebp+8
(即返回地址),成功地覆盖了shell code的地址。所以我得到了想要的东西。但是当我向前执行时,我得到了:
->shellcode_address in ?? ()
然后
Cannot find bound of current function
返回地址具有我想要的值。有什么想法这是怎么发生的吗?
此外,当我执行它时,我得到了一个分段错误,并且我已经使用-g -fno-stack-protector
编译它。为什么?