FTZ level1

hywn·2021년 8월 10일
0

FTZ

목록 보기
2/8
post-thumbnail

ssh 접속 시 ID, 비밀번호 모두 level1이다. 다음 단계인 level2로 접속하기 위해서는 이번 단계인 level1에서 my-pass 명령어를 사용해 level2의 비밀번호를 알아내야 한다.

setuid가 걸려있는 파일의 경우 해당 파일을 실행하면 id가 변경된다. 현재 접속한 id의 경우 level1이니 다음 레벨인 level2로 setuid가 되어있는 파일을 찾으면 되는 것이다.

리눅스에서 파일을 찾는 명령어인 find를 이용하여 명령어를 작성해 보면 다음과 같다.

find / -perm -4000 -user level2

어떤 의미인지 차례대로 해석해 보면 이렇다.

  • find / : 서버 전체에서 찾는다.
  • -perm -4000 : -perm 옵션은 특정 권한을 가진 파일을 찾을 수 있도록 해준다. 4는 setuid를 뜻하고, 000은 rwx 모두를 의미한다. 4000 앞에 붙은 - 의 경우는 해당 권한을 포함한 모든 것을 의미한다. 만약 앞에 - 기호가 붙지 않았다면 정확히 setuid만 걸린 파일만을 찾을 수 있다.
  • -user level2 : -user 옵션은 파일의 소유자를 지정할 수 있도록 한다. 따라서 소유자가 level2인 파일을 찾을 수 있도록 하게 된다.

하지만 위의 명령어를 그대로 입력하면 에러 메시지가 많이 나타나서 정작 원하는 결과를 찾기는 상당히 어렵게 된다. 따라서 2>/dev/null을 붙여준다. /dev/null은 null 장치로, 휴지통과 같은 역할을 한다. 2는 STDERR(STANDARD ERROR, 표준 에러) 를 의미하고, 1은 STDOUT(STANDARD OUTPUT, 표준 출력) 을 의미한다. 즉, 발생한 표준 에러를 전부 없앤다는 의미가 된다.

최종적으로 setuid가 걸린 파일을 찾기 위해 입력해야하는 명령은 다음과 같다.

find / -perm -4000 -user level2 2>/dev/null

그러면 이렇게 결과가 나오고, 해당 파일을 실행시켜 보면 아래 이미지와 같은 결과가 나타난다.

my-pass와 chmod를 사용할 수 없으므로, 그렇다면 비밀번호를 찾을 수 없는 것 아닌가? 라고 생각할 수도 있지만! /bin/bash 를 통해 bash를 실행시키면 해당 bash 쉘 안에서 level2의 권한으로 다른 명령어를 실행 시킬 수 있게 된다.

이렇게 level2의 비밀번호를 알아냈다🥳

0개의 댓글