level 3 풀이.
pw = "can you fly?"
일단 항상 문제를 접근하기 위해서는 cat hint를 쳐서 힌트를 찾아봐야 한다.
일단 갑자기 hint의 길이가 길어졌다.
C를 기반으로 한 프로그램 소스가 등장했다.
일단 int main부터 차례대로 보자면,
1번째 int main ~~~는 main이 어떤 값을 받았다는 뜻.
2번째 char ~~~~는 cmd 변수에 100칸을 할당해주는데 char 형으로 100byte 변수.
3번째 if ~~~~~는 argc변수가 2가 아닐 때 if 문을 실행한다.(!가 있으니 반대).
4번째 printf ~~~~는 (auto ~~~문구를 출력)
5번째 printf ~~~~는 (usage: ~~~~host라는 문구를 출력)
6번째 exit ~~~는 말 그대로 코드 밖으로 나간다.
7번째 strcpy ~~~는 stringcopy라는 뜻으로 cmd에 dig@ 입력.
8번째 strcat ~~~는 stringcat라는 뜻으로 두 개의 문자열을 합친다는 뜻. cmd에 argv[1] 붙힌다.
9번째 strcat ~~~는 stringcat이고 cmd 내용에 version ~~txt를 붙힌다.
10번째 system ~~는 cmd 배열의 값을 실행.
간단하게 설명하자면, SETUID 명령어를 치면 나오는 곳은 /bin/autodig이란 곳.
autodig이란 것을 정확히는 모르겠지만, 아마 C코드로 표현되는 것을 보니 코드를 통한 실행 파일이라는 것을 확인 가능.
그리고 more hint를 보면.
동시에 여려 명령어는 ;(semi-colon) 사용, 문자열 형태는 "" 사용.
여기서는 my-pass는 제외라는 말이 없으니 사용해도 될텐데, 그냥 입력하면 안되고 level1처럼 bin으로 이동한 후 bash를 사용해야 할 것이다. 세미클론이 힌트인 걸 보니.
즉 /bin/bash;my-pass 사용한다.
근데 /bin/bash;my-pass를 문자열 형태로 변환해야 되기에 "/bin/bash;my-pass" 형태로 쓴다.
결과적으로 위의 화면처럼 뜬다.
Cf) SETUID에 대한 정확한 개념 인지 및 명령어를 생각하고 조합 가능해야 한다.