在完成软件安全的课程作业bonus时想用ret2libc完成getshell操作,但本地调用system却失败,错误显示segment fault;跟进libc中的do_system函数调试发现,是指令movaps xmmword ptr [rsp+0x50],xmm0出的问题,经过网上查阅资料,该指令(movaps)需要rsp按照16字节对齐,然而我的第一次exploit执行到该条指令rsp以8结尾,所以最后程序直接crash掉。

那么解决方案有两个:

  • 把栈迁移到堆上,可以自由布局
  • 调整参数数量,进行适量填充保证执行到movaps这条语句的时候rsp以0结尾

老师留的题I/O有限,所以我选择了第二种方法,增加了一些padding

最后getshell成功