
[Heap exploitation] Heap Overflow
2021. 5. 8. 14:11
Hacking/Pwnable
Heap Overflow #include #include int main(void) { FILE* fd = fopen("secret","r"); char* input = malloc(40); char* secret = malloc(40); fread(secret, 1, 40, fd); fclose(fd); read(0, input, 100); // Overflow! printf("%s\n", input); } 두 개의 heap 메모리인 input 과 secret 을 할당한 뒤, secret 파일을 읽어서 두번째로 할당했던 secret 영역에 저장한다. 그 후 input 영역에 입력 값을 받고 출력시켜주는 코드이다. 이때 read 함수에서 취약점이 터진다. input 으로 할당한 메모리 크기는 40 바이트..

[Pwnable] Heap3
2021. 5. 6. 01:17
Hacking/Pwnable
Free free chunk는 bin이라는 freelist 구조체를 통해 관리 * freelist: 동적으로 메모리를 할당하고 해제할 때 메모리 관리의 효율을 높이기 위해 할당되지 않은 영역을 관리하는 연결 리스트 메모리 해제 : 해제하려는 영역을 freelist에 추가 / 메모리 할당 : freelist에 추가된 영역을 제거하고 해당 영역을 사용 -> 할당자는 할당 요청을 충족시키기 위해 적합한 청크를 bins에서 신속하게 찾아서 재할당한다. -> bins의 종류에는 Fast bin, Small bin, Large bin, Unsorted bin이 있다. -> 이는 malloc_state구조체(Arena_Header)에서 확인 가능하다. malloc_state구조체(Arena_Header) struct..

[Pwnable] Heap1
2021. 5. 5. 17:18
Hacking/Pwnable
Memory Allocator 힙 익스플로잇을 구현하기 위해서는 메모리 관리를 위해 사용되는 Allocator에 대한 이해가 필요하다. - dlmalloc, ptmalloc2, jemalloc, tcmalloc, libumem, 등 다양한 종류의 메모리 할당자가 있다. 여기서는 GNU C Library의 메모리 할당자인 ptmalloc2에 대해 설명하겠다. - ptmalloc2는 dlmalloc 코드를 기반으로 하며 멀티 스레드에서 사용되도록 확장되었다. ptmalloc2 (2.23) ptmalloc2은 동일한 시간에 2개의 스레드가 malloc을 호출할 경우, 메모리는 각각의 스레드가 분배된 힙 영역을 일정하게 유지하고, 힙을 유지하기 위한 freelist data structures 또한 분배되어 있..