level 3
2020. 8. 21. 02:55
역시나.
hint 파일 내용을 봤더니 C 소스코드가 나옵니다.
밑에 있는 system 함수를 이용해 level4 권한으로 my-pass 명령어를 입력하면 될거같습니다.
하지만, 소스코드에는 조건이 있는 듯 합니다.
다들 알거라 생각하지만 분석해보겠습니다. ㅋㅋ
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
char cmd[100];
if( argc!=2 ) { // 인자가 두개가 아니면 아래 내용 실행
printf("Auto Digger Version 0.9\n");
printf("Usage : %s host\n", argv[0]); // 첫번째 인자를 %s에 전달
exit(0); // 실행 종료 코드 0
}
strcpy(cmd, "dig @"); // cmd에 'dig @' 문자열 복사
strcat(cmd, argv[1]); // cmd에 두번째 인자 문자열 붙이기
strcat(cmd, " version.bind chaos txt"); // cmd에 문자열 붙이기
system(cmd); // system 함수 실행
}
소스코드 아래에 나와있는 힌트입니다.
첫번째 힌트는 ';'를 사용하면 되고, 두번째 힌트는 인자로 전달할 때 ""를 써주면 됩니다.
이제 autodig 파일을 찾아봅시다.
당연히 실행권한은 level4이고, setuid가 설정되어있겠죠?
찾았네요.
그러하답니다.
이제 autodig를 실행시켜봅시다.
먼저 조건을 맞춰야겠죠?
인자가 두 개라는 조건은 어떻게 맞출까요?
공백을 하나만 주면 됩니다.
즉, ./autodig "~~"를 입력하게 되면
argv[0] = ./autodig
argv[1] = "~~"
로 들어가게되어 인자가 두 개가 됩니다.
이제 명령을 연속으로 시켜야겠네요.
그러면 ';'을 써야겠죠.
또한 이 프로그램이 실행되는 동안 우리가 입력해야할 my-pass라는 명령어가 입력될 공간이 필요하니 쉘을 실행시켜야겠죠.
따라서 /binbash 명령과 my-pass 명령을 연속으로 입력하면 됩니다.
이 모든걸 종합하게 되면 ./autodig "/bin/bash;my-pass"가 되겠네요.