环境:WSL2,ubuntu16.04,python2
checksec文件:
这道题level3的思路一样,只是32位的程序改成了64位。
也就是说,在利用write函数泄露出libc的基地址时,需要用到寄存器来穿参数,write有三个参数,所以需要rdi,rsi,rdx三个寄存器,通过命令:
ROPgadget --binary level3_x64 |grep "pop"
结果:
从图中可以看到只找到了rdi和rsi寄存器,没有rdx寄存器
尝试gdb程序:
在read函数下断点,可以看到rdx的值为0x340,而write函数的地址小于0x340,也就是说我们可以不用修改write函数的第三个参数,即write函数的字段长度的那个参数。即rsi和rdi两个寄存器就足够
payload = (0x80+0x08)*'a'+p64(rdi)+p64(