System/FTZ
[FTZ school] level 3
BadSchool
2017. 5. 20. 00:01
▲level3의 hint를 읽은 결과. 보기쉽게 밑에 다시썼다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //다음 코드는 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. //- 동시에 여러 명령어를 사용하려면? //- 문자열 형태로 명령어를 전달하려면? | cs |
▲소스코드를 보자면 인자값을 받아 dig @+인자값+ version.bind choas txt를 system함수로 실행시킨다.
즉, 인자값 부분에 쉘을 실행시키는 명령어가 들어가야 할 것으로 보여진다.
힌트를 보자면 동시에 여러 명령어를 사용하려면? 이 있는데 방법은 세미콜론(;)을 사용한다.
문자열 형태로 명령어를 전달하려면? 대표적인 방법으로 perl 스크립트가 있다.
▲일단 find 명령어로 autodig파일을 찾아내었다.
▲익스플로잇을 위해 perl 스크립트를 사용하였다.
간단하게 보자면 perl로 ;/bin/sh;라는 명령을 문자열로 인자값에 보냈다. ;은 명령어를
끝마칠 때 쓰는 것이므로 컴퓨터는
/bin/autodig ;/bin/sh; version.bind choas txt 로 알아듣게 된다.
즉 세개의 부분이 별개로 작용되어 /bin/sh명령이 실행되고 level4의 권한을 얻어 my-pass로
패스워드를 알아낼 수 있다.