yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

FTZ level3 풀이 본문

wargame 풀이/FTZ

FTZ level3 풀이

yehey 2020. 9. 12. 19:09
id: level3
pw: can you fly?

log in

ls -l로 디렉토리 정보를 불러온다

 

ls -l

hint 파일을 읽어보자 (cat hint)

 

cat hint

이번 힌트에는 코드가 적혀있는 걸 볼 수 있다.

 

more hints를 먼저 해석해보면

동시에 여러 명령어를 사용해야하고

문자열 형태로 명령어를 전달해야한다.

즉, 문자열 형태의 명령어들을 한번에 전달해야한다는 것을 알 수 있다!

 

이번에는 주어진 코드를 해석해보자

//autodig

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

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

    char cmd[100];	//cmd라는 char형 배열을 size 100으로 선언

    if( argc!=2 ){	//argc!=2일때 (main함수에 전달되는 인자 수가 2가 아닐때)
    
        printf( "Auto Digger Version 0.9\n" );		//먼가를 출력하고
        printf( "Usage : %s host\n", argv[0] );		//사용법을 알려주는 듯 하다
        exit(0);					//main함수 종료
    }

	/*if 조건문을 만족시켰을 때
    autodig 실행시 전달되는 인자가 2개일 때 
    (기본적으로 실행 값이 첫번째로 들어간다. 
    따라서 실행시킬 때 인자 하나를 더 전달할 때)*/
    
    strcpy( cmd, "dig @" );			//앞서 만들었던 cmd에 'dig @'를 복사해주고
    strcat( cmd, argv[1] );			//실행 시 전달한 인자를 cmd에 복사
    strcat( cmd, " version.bind chaos txt");	//cmd에 " version.bin chaos txt"를 복사

    system( cmd );			//system을 이용해 cmd 배열을 system에서 처리한다. 

}

 

즉, 우리가 프로그램을 실행할 때 입력한 값이 cmd 배열에 복사가 된다.

(arcv[0]에는 실행경로가 자동으로 입력된다. 우리가 넣은 문자는 argv[1]에 존재한다!)

그리고 이 cmd가 system상에서 작동한다.

그렇다면 cmd에 우리가 원하는 명령어를 넣는다면?

=> 우리가 입력한 명령어가 system상에서 작동하게 된다!

 

우선 autodig 파일을 찾아보자

(find / -name autodig 2> /dev/null)

 

find autodig

autodig파일의 위치를 알아냈다!

이제 /bin으로 이동해서 autodig를 실행시켜보자 (cd /bin ,  ./autodig

 

autodig의 권한, setuid가 설정되어있음

autodig에는 setuid가 설정되어 있다. 따라서 level3의 권한으로 실행가능!

 

autodig에 아무런 인자도 주지 않고 실행했을 때

autodig에 아무런 인자도 주지않고 실행시켰을 때 코드분석한 결과처럼 사용법을 출력하는 것을 알 수 있다.

 

그렇다면 이제 인자를 건네주어야 하는데,

우리는 level3의 pw를 얻길 원하기 때문에 my-pass를 입력해보도록 하겠다!


리눅스에서 문자열을 인자로 건네주는 법
전달하려는 값을 ""(큰 따옴표)로 묶어서 건네준다.

인자로 my-pass 만 전달했을 때

my-pass만으로는 pw를 얻을 수 없는 것 같다.

그렇다면 shell을 띄운 후 my-pass를 입력하면 어떨까?

우리는 인자로 문자열 하나만 전달할 수 있고, 두가지 명령어를 전달해야한다.


리눅스에서 enter 없이 여러 명령어를 한번에 전달하는 법
명령어 사이에 ;를 넣어주면 한 줄에 여러 명령어를 입력할 수 있다.

; 사용해보기

[level3@ftz level3]$ 에서 cd 명령어와 ls 명령어를 줄바꿈 없이 실행시켜보자!

(cd /bin;ls)

 

cd 명령어와 ls 명령어를 줄바꿈 없이 입력

위의 사진 처럼 cd 를 먼저 실행하고 ls를 실행한 결과가 바로 나타난 것을 볼 수 있다.

 

다시 autodig로 돌아와서

우리는 쉘과 my-pass 명령어를 줄바꿈 없이 입력,실행하려고 하기 때문에

sh;my-pass를 인자로 전해주자! (./autodig "sh;my-pass") : sh 쉘 사용 (bash 쉘도 가능)

 

autodig 실행

입력 후 시간이 좀 지나야 결과가 나온다.

(ctrl+c 누르면 바로 결과 나옴)

 

level4의 pw

level4 pw: "suck my brain"

'wargame 풀이 > FTZ' 카테고리의 다른 글

FTZ level6 풀이  (0) 2020.09.15
FTZ level5 풀이  (0) 2020.09.14
FTZ level4 풀이  (0) 2020.09.13
FTZ level2 풀이  (0) 2020.09.12
FTZ level1 풀이  (0) 2020.09.12
Comments