ID : level1
Password : level1
힌트 :
문제를 풀기 전에 :
ls -al 이라고 입력하게 되면 좌측의 파일의 권한을 볼 수 있다.
이 정보를 알기 위해 stat이라는 api를 참조해보자
여기에 보면 중요한 mode_t라는 값이 있다. 이 값은 아래 그림과 같은 값들이 들어가게 된다.
이 값을 보면 리눅스는 각 사용자에게 해당 파일에 접근할 수 있는 권한을 제공함을 알 수 있다. 접근자는 <사용자, 그룹, 그 외> 로 제한할 수 있으며 파일의 권한에는 읽기, 쓰기, 실행으로 제한한다. 하지만 위 그림을 보면 이 외에도 set user id, set group id, sticky bit 값이 존재함을 알 수 있다.
set user id, set group id (이하 setuid, setgid)는 잠시동안 파일의 권한을 허용하는 설정값이다. 이 값이 있으면 파일을 실행하거나 변경할 때 해당 user 또는 group의 권한을 가지고 작업을 가능하게 해준다. 보통 /etc/password 파일이 해당 비트가 설정되어 있다.
sticky bit의 경우 공용디렉토리를 만들고 싶을 때 설정해주는 값이다. 이 값이 설정되면 어느 사용자라도 해당 디렉토리에 접근할 수 있으며 글을 쓸 수 있다. 만약 글을 쓰게 되면 쓴 사용자의 권한이 설정된다. 보통 모두가 접근할 수 있는 /tmp에 설정된다.
풀이 :
모든 FTZ 문제를 풀기 위해선 setuid라는 값을 알아야 한다. 다음 문제를 풀기 위해선 my-pass라는 바이너리를 실행시켜야 하는데 실행 시키기 위해선 상위 권한을 얻어야 하기 때문이다. 어떤 프로그램이 실행되면 실행중에는 프로세스의 권한을 가질 수 있기 때문에 setuid가 설정된 프로그램을 실행하고 어떠한 방법으로 우회한다면 해당 프로세스의 권한을 가질 수 있기 때문이다.
그렇다면!! 해당 비트가 설정되어 있는 파일을 찾아보자
다음과 같은 명령어로 찾으면 된다.
find / -user level2 -perm -4000 -print -xdev
1) find / : 루트부터 해당 옵션에 맞는 파일을 찾아라
2) -user level2 : level2 유저가
3) -perm -4000 : setUID 비트를 가지고 있는 파일을
4) -print -xdev : NFS/AFS로 마운트된 파일 시스템을 제외하여 출력해라
다른 파일엔 모두 접근이 금지되어 있는데 유일하게 하나의 파일만 접근이 가능하다는 것을 알 수 있다.
위 그림을 보면 유저의 실행권한이 x가 아닌 s로 설정되어있는 것을 알 수 있다.
level2 는 user이고 level1는 group이다.
따라서 나는 지금 해당 파일을 실행시킬 수 있다. 또한 실행 중에는 level2의 권한을 가질 수 있다.
/bin/ExecuteMe
를 입력하자
지금 해당 프로세스는 level2의 권한이므로 도중 쉘을 실행시킨다면 해당 프로세스의 권한을 가질 수 있다.
/bin/sh를 입력하자
입력 후 my-pass 를 입력하면 다음 level의 암호를 알 수 있다.
다음 레벨로 넘어가기 위해
su level2 를 입력하고 암호를 입력하자
글 내용이 잘 못되거나 궁금증이 있으시면 americano@korea.ac.kr 로 메일보내주세요
'리버싱 > FTZ' 카테고리의 다른 글
해커스쿨 FTZ Level5 (레이스 컨디션) (0) | 2015.02.16 |
---|---|
해커스쿨 FTZ Level4 (backdoor) (0) | 2015.02.16 |
해커스쿨 FTZ Level3 (명령어를 인자로 전달) (0) | 2015.02.16 |
해커스쿨 FTZ Level2 (vi 취약점) (0) | 2015.02.16 |
해커스쿨 FTZ 환경 구축 (4) | 2015.02.14 |