해커스쿨의 안내에 따라 FTZ level1으로 접속하여 파일 목록을 출력한다.



친절하게 hint라는 파일이 보이므로 hint를 읽어 주도록 하자

level2 권한에 setUID가 걸린 파일을 찾으라고 한다.


여기서 setUID가 뭔지 한번 알아보고 넘어가자

유닉스 파일 시스템에서는 각각의 파일마다 권한이 설정되어 있다.
위에 public_html의 줄을 보면(어두워서 뭐가 public_html인지 모르려나.. 2번째) drwxr-xr-x라고 쓰여 있는것이 보일것이다.

이러한 식으로 되어있는것이 유닉스 파일시스템의 권한이다.

r = 읽기권한
w = 쓰기권한
x = 실행 권한

앞에서부터 첫번째 뒤로 3개 단위로 소유자, 소유자가 속한 그룹, 다른 사용자의 권한을 나타낸다. 첫번째 자리는 d가 있으면 디렉토리, -로 되어있으면 일반 파일이다.

비트로 표현하면 8비트로 r = 4, w = 2, x = 1로 각 숫자를 더해 표현하면 public_html의 권한은 755가 된다.

setUID는 조금 특이한 권한으로 rwsr-xr-x 이런식으로 표현하며, 비트로는 4000으로 나타낸다. 즉, 위 권한은 비트로 표현하면 4755가 된다. 

이밖에 비슷한 기능으로 setGID, Sticky-bit가 있고 2000, 1000으로 표현한다.

setUID는 소유자권한의 x에 s로, setGID는 그룹권한의 x에 s로, Sticky-bit는 다른사용자권한의 x에 t로 표현하게 된다.


setUID가 걸린 파일을 찾기 위해선

find명령어를 사용하면 되는데, -perm 옵션과 -user옵션을 이용하면 된다.
지금 찾고자 하는건 권한이 4000대이고, 사용자가 level2이므로
$ find / -user 사용자이름 -perm -4000이라고 입력하면 된다.


실행을 하고 나면 /bin/ExcuteMe가 보인다.

Permission denied라는 표준 에러가 보이는것이 귀찮다면
$ find / -perm -4000 -user level2뒤에 2> /dev/null을 붙여주면 된다.
2는 표준 에러를 뜻하며
2> /dev/null 은 표준 에러를 null로 리다이렉션 하라는 뜻이다.
즉, 표준에러를 출력하지 않겠다는 뜻이다.


명령어를 다시 입력하면,

훨씬 짧게 나왔다.


이제 /bin/ExcuteMe의 파일 권한을 확인해 보면,

권한이 -rwsr-x---, 소유자가 level2임을 알수 있고 즉 lelvel2에 setUID가 적용 되어있음을 알 수 있다.


사실 이 방법 말고도 tmp폴더안의 test.txt의 내용을 확인해보면 /bin/ExcuteMe가 적혀있다.


/bin/ExcuteMe파일을 찾았으니
$ /bin/ExcuteMe로 파일을 실행하면 다음 화면이 뜬다.



암호를 아는 명령어가 my-pass이지만 그것은 안된다고 하니 쉘을 실행해서 level2의 권한을 획득하자.
쉘의 종류는 sh, bash, ksh, csh 등이 있다.


쉘을 띄운다음 암호를 확인하는 my-pass 명령어를 쓰면 암호를 얻을 수 있다.


암호는 : hacker or cracker이다. 






+ Recent posts