ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0x06.Malloc hook
    0x.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);



    hook는 기존의 함수와 거의 비슷한 형태를 가지고 있지만 CALLER라는 인자를 추가로 받는다. 이 CALLER라는 놈을 통해 말록이 호출될 시에 스택에 저장되는 ret를 확인할 수 있다. 또한 만약 이 곳이 어떤 인자값을 가지고 있다면 그 값이 수행이 될 것이다.



    예를 들어서 익스플로잇을 작성할 경우에 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

    댓글

Designed by Tistory.