ctf-wiki之ret2syscall

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即可找到相应的地址


找到符合的地址为0x080bb196


找到pop edx ecx ebx的地址 0x0806eb90


/bin/sh的地址为0x080be408


获得int 0x80的地址为0x08049421

脚本:


运行结果:


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容