ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LEVEL 11 golem write-up
    System hacking training/Hackerschool LOB 2018. 4. 20. 05:47

    skeleton -> golem


    오늘은 golem에 대해 풀이를 하였다.


    문제는 답정너였는데 풀이하는데 꽤 애먹었다.


    [문제 + 힌트]



    문제를 보면 딱 답정너라는걸 알 수 있다.


    역시 지금껏 풀어왔던 문제처럼 쉘코드를 어디에 넣을지...가 관건이다.


    먼저 if(argv[1][47] != '\xbf') 일때 예외처리가 되면서 exit(0)로 바이너리가 종료된다.


    따라서 스택에 쉘코드를 올리고 return 해야된다.


    그런데 stack destroyer! 부분을 보면 ret 하기 전에 memset()로 buffer와 ret (buffer+8) 보다 높은 주소의 모든 스택을 0으로 세팅하는것을 확인할 수 있다.


    그렇다면 남은 공간은 스택의 낮은 주소가 있다.


    이해를 위해 그림을 그려보면 현재 스택은 이러한 형태이다.


    Low <-    | char buffer[40] | SFP(4) | ret(4) |    -> High


    ret 보다 높은 주소를 갖는 스택공간은 stack destroyer! 에 의해 모두 0으로 초기화되지만

    char buffer[40] 보다 낮은 주소에 대해서는 아무런 작업을 하지 않는다.


    직접 확인해보니



    역시 스택의 낮은 주소는 0으로 세팅되지 않았다.


    따라서 이 문제를 풀기 위해서는 낮은 주소를 갖는 스택의 공간에 쉘코드를 넣고 return 하여야 한다.


    여기서 낮은 주소를 갖는 스택의 공간에 어떻게 쉘코드를 넣을까... 고민하다가 LD_PRELOAD 라는 환경변수에 대해 알게되었다.




    LD_PRELOAD 란?


    환경 변수의 일종으로 라이브러리 후킹(hooking)이 필요할 때 사용되는 환경 변수이다.

    (여기서 후킹이란 이미 작성되어 있는 코드의 특정 지점을 가로채서 동작 방식에 변화를 주는 기술이다.)

     LD_PRELOAD 환경 변수에 파일을 등록하면 프로그램이 메모리에 로드되기 전에 환경변수에 등록한 파일을 먼저 메모리에 로드하게된다.


    따라서 LD_PRELOAD 환경 변수에 라이브러리를 등록하면 다른 공유 라이브러리보다 먼저 참조하게 된다.


    설명이 너무 어려워서 직접해보면서 이해했다.


    쉬운 예제를 통해 공부하였는데

    http://code1018.tistory.com/154

    이분의 블로그를 참고하였다. (아니 따라해보았다.)


    getuid 후킹 파일을 만들어서 후킹 해보았다.


    이렇게 getuid 후킹을 위해 원형과 똑같은 포멧의 함수를 만들어주고

    return 7777로 후킹이 되었는지 확인을 하면된다.


    이제 컴파일을 하고



    export 하여 LD_PRELOAD에 변경한 공유 라이브러리의 경로를 올려준다.


    그 후 id 명령으로 7777로 변경되었는지 확인하니



    정말로 uid=7777로 변경이 된것을 확인할 수 있었다.


    여기서 알 수 있는점은 LD_PRELOAD 라는 환경 변수에 파일명을 등록하면 프로그램 실행 시 등록한 파일이 메모리에 올라간다는 점이다.

    그리고 파일명도 올라가는것을 확인하였는데


    gdb로 esp - 0xfff 하여 낮은 주소의 스택을 살펴보았더니



    이와 같이 경로와 함께 파일명이 스택에 올라간 것을 확인할 수 있었다.



    그렇다면 이 파일명에 쉘코드를 올려서 쉘을 딸 수 있을것이다.


    그리하여 파일명을 바꾼뒤 다시 컴파일하여 export로 LD_PRELOAD에 등록해주었다.



    이제 쉘코드가 들어간 위치를 확인하고 익스하면 된다.



    NOP Sled가 들어간 위치 중 아무곳이나 잡고 ret을 조작해주면...!



    드뎌 쉘을 땄다....


    이상 golem 풀이를 마친다.

    반응형

    'System hacking training > Hackerschool LOB' 카테고리의 다른 글

    LEVEL 13 bugbear write-up  (0) 2018.04.26
    LEVEL 12 darkknight write-up  (0) 2018.04.22
    LEVEL 10 skeleton write-up  (0) 2018.04.11
    LEVEL 09 vampire write-up  (2) 2018.04.04
    LEVEL 08 troll write-up  (0) 2018.03.31
Designed by Tistory.