티스토리 뷰
Basic Heap Exploit Study -> how2heap -> Easy CTF Problem -> :-)
이번주의 system exploit 공부 목표
glibc -> heap_info, malloc_state, malloc_chunk라는 구조를 가지고 있음.
heap_info, malloc_state는 main_arena와 thread_arenaa의 차이점을 지니고 있음.
glibc malloc() function -> ( if compiled ) __libc_malloc()
malloc루틴 내에서 또다른 malloc routine들이 불림.
main_arena -> brk(), sbrk()로 영역을 확장.
thread_arena -> mmap()으로 영역을 확장.
* What is Arena?
-> Main Thread 뿐만 아닌 다른 Threads들 모든 것들에 대한 Heap 영역.
malloc_state -> bins, top_chunk, last_remainder_chunk 등등에 대한 정보를 가지고 있음.
thread_arena의 malloc_state -> heap 영역에 존재 / thread_arena에서는 multiple heaps라고해도, 하나의 malloc_state만을 가지게 된다.
main_arena의 malloc_state -> 라이브러리의 data 영역에 존재
* main_arena는 heap_info를 갖지 않음.
malloc_chunk -> Heap영역은 User Request에 의하여 chunk로 나누어진다.
chunk의 종류는 일반적으로 4가지 : Allocated Chunk, Free Chunk, Top Chunk, Last Remainder Chunk
[ Allocated Chunk ]
유저에게 반환되는 포인터인 mem과 prev_chunk, next_chunk를 계산할 때 쓰이는 chunk포인터는 서로 별개의 것이다. -> malloc.c에 매크로로 선언되어 있음.
-> next_chunk, prev_chunk는 현재 chunk를 기준으로 prev_size, size를 바탕으로 연산을 진행한다.
현재 size의 끝 3bit는 flags를 담는데, 0x1 0x2 0x4이다. -> PREV_INUSE, IS_MMAPED, NON_MAIN_ARENA
[ Free Chunk ]
Allocated Chunk가 Free되게 되면, User에게 반환되었던 mem의 위치부터 fd, bk가 생성된다.
fd는 bin리스트에 존재하는 다음 chunk의 chunk_ptr을 가리키게 되고, bk는 리스트상의 이전 chunk_ptr을 가리키게 된다.
Bins는 Fastbin을 제외하고는 double linked list를 구성하고 있다.
일단 Bins는 Size에 의존적인데, 왜냐하면 Size에따라 Fastbin, Unsortedbin, Smallbin, Largebin으로 나누어지기 때문이다.
[ Heap Exploit ]
malloc, free -> glibc에서 제공하는 library Function.
똑같은 메모리주소를 1번이상 free하면 안된다. ( 개발자가 조심해야함 ) -> Exploit Vector
Heap overflow를 주의. -> beyond the amount of memory requested
나머지는 how2heap + 아래의 링크와 같이 공부
Heap exploit에 좋은 문서 : https://heap-exploitation.dhavalkapil.com/
'System Study' 카테고리의 다른 글
HITCON Training sysmagic [ lab1 ] (0) | 2017.07.10 |
---|---|
unsafe unlink exploit [ Heap exploit ] (0) | 2017.07.10 |
Analyze heap structure ( glibc malloc ) (0) | 2017.07.09 |
x86 32bit system call convention (0) | 2017.07.07 |
GDB-PEDA 명령어 (0) | 2017.07.07 |
checksec vs pwntools ELF function (0) | 2017.07.04 |