原理
ret2shellcode,当程序当中没有system函数时,我们需要自己往栈上写入一段shellcode,然后控制eip使其指向shellcode的地址。
shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。
在栈溢出的基础上,要想执行 shellcode,需要对应的程序在运行时,shellcode 所在的区域具有可执行权限。即必须关闭堆栈不可执行功能。
例题(来自ctfwiki):
首先checksec:
发现程序没有开启任何保护,并且存在可读可写可执行段。
然后ida32打开: