본문으로 바로가기

글을 시작하기전에.. 제가 이 해커스쿨 ftz를 푸는이유는 단순히 그냥 문제를 풀어보고싶어서가아니라 스스로 이문제를 풀면서 여러가지 기본 지식들을 익히고 배우기 위해서이므로 제가 어떤생각을했는지 어떻게풀려고 시도했는지 그런식의 스토리 방식으로 글을 쓰려고합니다. 간혹 문제와 전혀 관련없는 지식들이나 제가했던생각중 틀린부분이 나올 수 있습니다.


저번과같이 hint파일을 cat명령어로 열어보았다.



텍스트 파일 편집 중 쉘을 실행시킨다는것은 결국 level3권한으로 /bash/bin을 입력하는건데 그걸 편집기에서 한다는소리인것같습니다. 이문제를 푸는 초반에는 텍스트 파일 편집이라고해서 트레이너에서 배운 cat로 파일을 만들고 수정하는법을 써서 여기서 파일을하나만들고 그파일을 실행했을떄 권한이 상승되게 하려고 했다.


그래서 cat > hacking.c 라는 명령어를해봤습니다.


저런 오류가뜨면서 실패.. 그이유는 이디렉토리에 쓰기권한이 없어서이다.

(이떄부터 문제와 관련없이 제가푼 내용입니다. 문제와관련되서 글을 보고싶으신분들은 건너뛰셔도 좋습니다.)---------------

그래서 쓰기권한이있는 디렉토리를 찾기시작했다. 그결과 /tmp만 유일하게 쓰기권한이었다.
그리고 그디렉토리에들어가서 cat > level2hacking를 해보니까 잘생성이되었고, 이제 bash쉘스크립트를 어떻게만드는지 알기위해서
https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/sha-bang.html 위 링크에서 어떻게 작성하는지 틀만 배웠다.

#!/bin/bash
명령
ex) pwd


이렇게하면 간단히 프로그램을 실행할 수 있었다. 그래서 나는 코드를 bin/bash 이런식으로 간단하게만짜고 이제 어떤식으로 그파일에 권한을줄지 생각했다.

그러면 SetUID로 root권한을 얻어서 저파일을 chown으로 leve3의 소유로바꿔준다음 /bin/bash를 실행시켜주면 끝이라고 생각했다.

일단 root권한은 chmod로 (chown을하려면 root권한이 필요하지만 chmod는 다른권한을 필요로하지않음) 제가만든 level2hacking의 권한을 4777(혹시몰라서 777)로 바꿔서 SetUID권한을 준다음에 그파일을 실행하면 level2hacking을 실행하는동안 root권한을 얻을수있고 그러므로 chown으로 파일소유를바꾼다음 /bin/bash실행.. 이 이론상으로는 완벽했습니다. 하지만 여기서 내가 잘못 생각하고있는게 있었다. 내가만든 level2hacking파일을 내가 SetUID를 주면 SetUID는 그파일의 소유자의권한으로 실행되기떄문에 level2가 소유자이니까 level2권한으로 실행이되서 결국에는 chown이 실행이안될뿐더러 /bin/bash를하면 level2권한에 쉘이열린다. 이것을 꺠닫는데만 몇시간이 걸렸다.. (결론 : SetUid는 파일을 열었을떄 소유자 권한으로 열어준다. root권한이 아님)


---------------------------------------------------------------------------------------------------------------------------------------


그래서 나는 다시 level3의 SetUID권한이 걸려있는 파일을 찾아보았다.


/usr/bin/editor가 있었다.

상세정보를 보면 아래와 같다.



소유자가 level3인데 level2그룹의사람이 읽기와 실행이가능하며 SetUID가 걸려있다.



일단 SetUID이므로 이미지금 level3의 권한이있고, Vi란 리눅스 텍스트편집기이다.

Vi에 관한 명령어는 http://nextline.tistory.com/49  이곳에 정리되어있다.

저 글을 참고해서 명령어를보면 !로 쉘 명령을 실행시킬수 있다고 나오기떄문에 :를 누르고 모드를 바꿔준뒤 !/bin/bash 를해주게되면 문제를 풀 수있다.




후기 // 와 드디어 처음으로 완벽히 문제를 풀었네요! 처음에 SetUID에대한 완벽한 개념이 머리에없어서 실수를하긴했지만 결국에는 답을찾게되서 재밌었습니다. 막 안풀릴때는 이것저것 다해보면서 다돌아다녀봤는데.. 처음에 tmp에들어가서 파일만들고 막 고생을할떄 '이건아니다' 라는생각이 머리에있긴했지만 그걸 증명할만한게없어서 결국 끝까지가서야 SetUID권한이 root권한이아닌 소유자권한으로 권한이 올라간다는걸알았습니다. 나름대로 좋은경험이였다고 생각합니다. 그리고 Vi편집기를 저번부터 못써가지고 어쩔줄몰랐는데 오늘 파일을 만들고 수정하고 하면서 여러 명령어들도익히고 Vi편집기가 어떤식으로 작동하는지 공부도해보고해서 Vi에대해서 알수있는 경험이였습니다. 그리고 확실히 level1보다는 트레이닝을하니까 쉬워진것같습니다. (그래도 푸는시간은 4~6시간정도 푼것같아요) 문제풀다보니까 시간이가는지안가는지모르겠어요 ㅋㅋㅋ


참고한 자료 : https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/sha-bang.html,http://tip.daum.net/openknow/3701363, 내블로그!


+7/25

수정한뒤 후기 // 마찬가지로 위에후기는 글을 이미 수정했기떄문에 조금 다를 수 있습니다. level1을 쓸때만큼은아니지만 감탄사도 많았고 쓸대없는 말도 많아서 수정했습니다.