FTZ level3
FTZ LEVEL 3
※ FTZ 구축하는 방법은 구글링하시면 쉽게 찾으실 수 있습니다.
※ 개인적인 문제풀이로 해답을 보시기 전에 직접 풀어보시기를 권해드립니다.
※ 악용으로 인하여 발생되는 사고에 대해서는 절대 책임지지 않습니다. 반드시 숙련용으로 제공된 환경에서만 사용해보시기 바랍니다.
ID : level3
PW : can you fly?
힌트에 autodig 라는 파일의 소스를 보여줍니다.
소스를 분석하기 전에 autodig 파일이 어디있는지 검색해봅니다.
$ find / -name autodig -print 2>/dev/null
bin 디렉터리에 autodig 파일이 있는것을 알 수 있네요.
그렇다면 다음 레벨의 비밀번호를 획득하려면이 파일에 level4의 setuid 권한이 걸려있진 않을까?.. 라는 유추를 해볼 수 있습니다.
확인해보면 되겠죠.
$ find / -user level4 -perm +4000 print 2>/dev/null
역시 autodig 파일에 setuid가 설정되어 있는걸 볼 수 있습니다.
이 파일을 분석하고 비밀번호를 획득해야 겠네요.
소스를 분석해보면 인자값이 2가 아닐 때 printf를 출력해주며 exit(0)으로 빠져나가게 됩니다.
인자값 1는 파일이름이므로 인자값 1개를 넘겨주어야 합니다.
소스에서 인자값을 char로 받으므로 문자열형식, 즉 "" 형태로 넘겨주어야 합니다.
그렇다면 형식은 autodig "" 가 되겠습니다.
* strcpy : 문자열 복사
* strcat : 문자열 이어 붙이기
more hints 를 살펴보면 다중 명령어와 문자열안에서의 명령어 실행방법이 써 있는데 위의 형식을 토대로 힌트를 준 것 같습니다.
우리가 필요한 정보는 level4의 패스워드이고 level4 권한을 갖고있는동안 my-pass 명령어를 쓴다면 패스워드를 얻을 수 있겠죠.
다중명령어를 쓰는 방법은 ; && || 등 문자열이 있는데 &&은 선행 명령어가 성공해야만, ||은 선행 명령어가 실패해야만 실행이 되기
때문에 이 문제에서는 ; 이 제일 효율적이겠습니다.
그렇다면 결론은 autodig "host;my-pass"
$ autodig "8.8.8.8;my-pass"
dig 의 대한 도메인 값을 넘겨주고 중복명령어로 level4 권한으로 my-pass명령어를 실행합니다. 그러면 level4의 비밀번호를 얻을 수 있습니다!
사실 dig 명령어는 fake이므로 my-pass 명령어만 실행할 수 있으면 되기 때문에 ; 앞의 구문은 아무 상관이 없습니다..ㅎㅎ 아무렇게나 써도 뒤에 명령어는 실행이 되기 때문이죠.
$ autodig "this is fake!!!!;my-pass"
level4 PW : suck my brain
'War Game > ftz' 카테고리의 다른 글
FTZ level6 (0) | 2017.02.21 |
---|---|
FTZ level5 (0) | 2017.02.16 |
FTZ level4 (0) | 2017.02.15 |
FTZ level2 (0) | 2017.02.10 |
FTZ level1 (0) | 2017.02.10 |