FTZ란 Free Training Zone의 약자로 hackerschool에서 배포하는 워게임입니다.
총 20문제로 구성되어 있으며 각 문제를 격파하여 다음 레벨의 패스워드를 얻는 형식입니다.
문제를 격파하고 다음 레벨의 bash를 획득하였다면 my-pass로 패스워드를 확인할 수 있습니다.
사용 linux 명령어
ls - 파일 내역 출력
cat - 파일 내용 확인
find - file search 명령
ex) find / -user level2 2>/dev/null
/(root)디렉터리부터 level2 유저소유의 파일을 탐색하고 오류는 출력하지 않음
send me email if you have any questions.
FTZ Level 3
ID : level3
PASSWD : can you fly?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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 );
}
level3의 힌트로 제공되는 소스.
추가 힌트
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
argc는 main에 전달되는 파라미터의 개수이고 argv는 main에 전달되는 파라미터이다.
인자의 개수가 2개가 아니라면 프로그램을 종료하도록 조건이 걸려있다.
argv[0]는 파일명, argv[1]부터 전달한 인자이므로 프로그램을 실행할 때, 1개의 인자를 전달하면 조건을 피할 수 있다.
strcpy? - 문자열 복사 함수로 cmd에 “dig @”를 복사.
strcat? - 문자열을 연결하는 함수로 cmd에 argv[1]을 이어붙임.
system? - linux의 명령을 실행하는 함수로 파라미터로 전달받은 명령을 실행.
힌트로 제공받은 소스의 바이너리 파일을 찾아 공격을 시도하자.
명령어를 문자열 형태로 전달하기 위해 ““로 감싸고 동시에 여러 명령어를 전달하기 위해 ;를 활용하자
;는 linux에서 여러 명령어를 동시에 실행하기 위해 사용된다.
level4의 passwd를 획득하였다.