ret2syscall即控制程序执行系统调用,获取shell
查看一下程序保护
程序放进IDA中
发现gets函数明显的栈溢出。但程序中没有system等函数供使用。
则利用系统调用指令 inx80运行execve("/bin/sh",NULL,NULL)获得系统shell
将系统调用号存入eax寄存器,第二个参数,第三个参数,第四个参数分别存进
ebx,ecx,edx寄存器即可执行execve("/bin/sh",NULL,NULL)
在eax寄存器中存放系统调用号0xb
在ebx寄存器中存放"/bin/sh"
在ecx寄存器中应为0
在edx寄存器中应为0
execve()函数作用时执行一个新的程序,程序可以是二进制的可执行程序,也可以是shell,python脚本。
想要在寄存器中存放各种值,当栈顶为10时,调用pop eax出栈指令即可将寄存器eax赋值为10。
那么我们就需要在程序中寻在 pop eax;ret;等指令的地址
通过指令 ROPgadget即可找到相应的地址
脚本:
运行结果: