문제풀이
힌트를 확인해보니 /usr/bin/level5가 /tmp/level5.tmp라는 임시파일을 생성한다고 한다.
/usr/bin/level5 파일에 접근하면, level6 권한의 setuid 비트가 걸린 파일임을 확인 할 수 있다.
level5 파일이 /tmp/level5.tmp라는 임시파일을 생성한다고 했으니 실행해서 확인해보자.
hint에서 알려줬던 내용과는 다르게 level5.tmp라는 임시파일이 없다.
아마도 /usr/bin/level5를 실행하면 /tmp/level5.tmp 임시파일을 생성 후 접근하고 이후에 바로 삭제하는 것 같다.
level5.tmp가 바로 삭제되는 것으로 보아하니, level5.tmp의 내용을 중간에 가로채는 것이 문제의 핵심일 것 같다.
○ level5 프로그램 실행과정
1) /tmp/level5.tmp 임시파일 생성
2) level5.tmp에 접근 후 내용 작성
3) 실행 후 level5.tmp 삭제
간단하게 생각해보자.
level5 프로그램의 실행 과정을 보면 임시파일 생성 후에 접근을 한다.
접근했을 때, 내용을 작성 할 것이고 그 내용을 가로채야한다. 하지만 이후에 작성한 level5.tmp를 삭제한다.
그렇다면 내용을 어떻게 가로챌 수 있을까?
→ level5.tmp라는 이름의 심볼릭 링크 파일을 만들어서 심볼릭 링크 파일이 가리키는 원본 파일에 내용을 작성하게 만들면 될 것 같다!
즉, 심볼릭 링크 파일을 이용한 레이스 컨디션 취약점을 실습하는 문제다.
○ 심볼릭 링크 파일
원본 파일을 가리키는 링크정보만을 가진 파일이다. (윈도우의 바로가기와 비슷한 개념이라고 생각하면 된다.)
이렇게 하면 level5.tmp 파일이 삭제되더라도 심볼릭링크 파일이 가리키는 원본 파일에 내용이 남아있을 것이다.
실습을 시작해보자.
먼저, tmp 폴더에 hacker라는 원본 파일을 생성한다.
다음으로 hacker(원본파일)를 가리키는 level5.tmp(심볼릭링크 파일)을 생성한다.
bin 디렉토리에 있는 level5 프로그램을 실행한다.
level5가 실행되면, 미리 만든 level5.tmp(심볼릭 링크 파일)에 접근할 것이고 이것이 원본 파일인 hacker 파일을 가리키면서 결국 hacker 파일에 내용이 작성 될 것이다.
hacker 파일의 내용을 확인해보자.