-
0x06.Malloc hook0x.Heap Tutorial 2018. 3. 19. 17:17
0x06.Malloc hook
GNU C library에서는 hook이라는 놈을 제공하는데, 이 놈의 값을 변경가능하도록 하여 디버깅을 수월하게 할 수 있도록 설계되었지만, Heap Overflow를 익스할 때 주로 악용되기도 한다.예로 malloc이 프로그램이 실행됨에 의해 호출되면 C 라이브러리가 hook이 존재하는지를 확인하고 만약 존재하면 그 hook 버전을 부른다. 만약 이 hook이 기존의 malloc을 호출한다면 malloc이 실행될 것이고, system을 실행하면 시스템이 실행될 것이다.
void *(*__malloc_hook)(size_t SIZE, const void *CALLER);
void *(*__realloc_hook)(void *PTR, size_t SIZE, const void *CALLER);
void (*__free_hook) (void *PTR, const void *CALLER);
예를 들어서 익스플로잇을 작성할 경우에 malloc의 hook부분에 oneshot 가젯을 값으로 덮어씌게 되면 동적메모리를 할당하면서 malloc_hook 부분이 호출되게 될 것이고, 그 순간에 oneshot 가젯이 수행되어 execve("/bin/sh", null, environment)와 같은 명령어가 실행되어 쉘을 딸 수도 있다.'0x.Heap Tutorial' 카테고리의 다른 글
0x08.How2heap - unsafe_unlink (0) 2018.04.10 0x07.How2heap - fastbin_dup_consolidate (0) 2018.04.09 0x05.How2heap - fastbin_dup_into_stack (0) 2018.03.12 0x04.How2heap - fastbin_dup (0) 2018.03.08 0x03.How2heap - first_fit (0) 2018.03.08 댓글