前置 ret2syscall 的基础我们就不做过多讲解了
利用思路与 32 位类似,只是传参的寄存器是:
rdi -> rsi -> rdx -> rcx -> r8 -> r9
我们这里只用到前三个就可以了,以及 rax
还有一个区别就是:
32 位系统调用最后是执行 int x080
而 64 位系统调用最后是执行 syscall
检查一下,64 位程序,开启 NX 保护:
ida 看一下 main 函数,存在明显的栈溢出
先找 pop rax;ret
ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "rax"