ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [FTZ Level20 풀이]
    System/FTZ 2018.02.18 19:06

    [Level20 Code]

    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    main(int argc,char **argv)
    char bleh[80];
      setreuid(3101,3101);
      fgets(bleh,79,stdin);
      printf(bleh);
    }   
     
    cs

    FTZ의 마지막 문제다.

    fgets( )에서 길이값을 79로 제한하고 있어서 BOF공격은 불가능하다.

    하지만, printf(bleh)에서 FSB취약점이 발생되므로 FSB를 이용하면 쉘을 딸 수 있겠다.

    FSB에 대한 자세한 설명은 블로그에 정리해두었으니 설명은 생략하겠다.

    [FSB 정리글]




    [FSB 정보수집]

    우선 FSB를 이용해서 공격하는 방법은 3가지가 있다.

    1. GOT Overwrite

    2. RET 변조

    3. DTOR_END 변조


    1번의 경우는 printf(bleh)뒤에 실행되는 함수가 없기 때문에 불가능한 공격법이고


    2번의 경우는 RET의 주소를 알아내야 하는데

    보다시피 심볼정보가 지워져서 gdb를 이용한 분석은 불가능한 상황이다.


    따라서, 3번 DTOR_END(소멸자)값을 알아내서 공격해야 하는데

    이 값을 알아내는데 nm / objdump 2가지 명령어를 사용할 수 있다.

    난 처음에 nm만 알고있어서 문제를 푸는데 시간이 꽤 걸렸다.


    [nm Attackme]

    이렇게 nm을 이용해서 알아내려고 하면 정보가 뜨지 않는다.

    여기에서 필요한 정보를 알아낼 길이없어서 약간 멘붕에 빠졌었다..

    그러다가 objdump -h 옵션으로도 소멸자 정보를 알아낼 수 있다는 걸 알게되었다.


    [objdump Attackme]

    보면 DTOR주소는 [0x8049594]이며, 여기서 4를 더한 값인 [0x8049598]이 DTOR_END의 주소이다.


    이제 EGGShell을 돌려서 EGG환경변수 주소를 알아내면 된다.

    EGG : [0xbffff474]


    [FSB Attack]

    Level20을 클리어했다!


    다음부터는 LOB풀이를 시작하겠다.



    'System > FTZ' 카테고리의 다른 글

    [FTZ Level20 풀이]  (0) 2018.02.18
    [FTZ Level19 풀이]  (0) 2018.02.17
    [FTZ Level18 풀이]  (1) 2018.02.17
    [FTZ Level17 풀이]  (0) 2018.02.16
    [FTZ Level16 풀이]  (0) 2018.02.16
    [FTZ Level15 풀이]  (0) 2018.02.16

    댓글 0

Designed by Tistory.