
有关知识在aarch64中:
X29相当于rbp寄存器。
X30寄存器中保存程序的返回地址,当ret时,会将X30中的地址给PC寄存器。
通过X0-X7寄存器传参。
ldr:Load Register(加载寄存器)
ldr x0, [sp, #0x18] 这条指令的含义是将栈指针 (sp) 加上偏移量 0x18 所指向的内存地址中的数据加载到寄存器 x0 中。
ldr x0, [sp], #0x18 这条指令的含义是将栈指针 (sp) 所指向的内存地址中的数据加载到寄存器 x0 中,然后将sp增加偏移量 0x18。
本题泄露的got地址只有三字节,其实是“\x00”截断,需要我们加上0x4000000000。
分析
先泄露libc,再栈溢出ret2libc。
这里我们在ropper中找到一个gadget:ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret;
思路:将/bin/sh传给X0,将system传给X30。按照x64来说,我们会这样构造:prdi binsh system
但是这道题传参并不是紧紧邻接的。我们调试一下 ...