본문 바로가기

리버싱/FTZ

해커스쿨 FTZ Level1 (setuid)

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 로 메일보내주세요