level 3
(비밀번호 : can you fly?)
이번에도 level3 문제에 대해 알기 위해 ' ls ' -> ' cat hint ' 로 hint 파일의 내용을 보았다.
hint 파일을 보면 두 가지 정보가 나온다.
첫 번째, autodig 의 소스 코드가 나온다.
autodig은 사용자의 입력을 받아 인자가 2개가 아니면 오류를 출력한다. ( argc != 2 )
' strcpy ' 를 사용해 " dig @ " 를 cmd로 복사하고, 나머지 인자들을 ' strcat ' 를 사용해 이어붙인다. ( strcat ( cmd, argv[1] ) )
' strcat ' 를 사용해 마지막에 " version.bind chaos txt " 를 이어붙인다.
' system() ' 명령어를 사용하여 cmd 를 실행한다.
strcpy() 함수
헤더 파일 : <string.h> ( C++에서는 <cstring> )
함수 이름 : str ( =string ) + cpy ( copy ) = 문자열을 복사하는 함수
strcat() 함수
헤더 파일 : <stinrg.h> ( C++에서는 <cstring> )
함수 원형 : char* strcat(char* dest, const char* origin);
dest 문자열 끝에 있는 '\0'가 사라지고 그 위치에 origin이 이어지는 함수, 즉 문자열을 이어주는 함수
두 번째, 문제인 level4의 권한을 얻으라는 문구와 more hints 가 나왔다.
동시에 여러 명령어를 사용하려면 ' ; ' ( 세미콜론 ) 을 이용하면 되고, 문자열 형태로 명령어를 전달하려면 " " 또는 ' ' 를 사용하면 된다.
autodig 파일을 이용하여 level4의 권한을 얻는 것이므로 먼저 autodig 파일의 위치를 찾아보았다.
find 명령어를 통해 autodig이라는 이름의 파일을 찾아보았다너 ' /bin/autodig ' 인 것을 확인할 수 있었다.
system() 을 이용해서 공격을 해보았다. ' /bin/autodig ' 뒤에 쉘을 열어 my-pass를 얻는 명령을 써주었다.
여기서 " " 을 사용하지 않고 ' /bin/autodig /bin/bash ; my-pass ' 로 작성하면 ' /bin/autodig /bin/bash ' 만 system() 로 전달이 되고 my-pass는 cmd에서 실행된다.
하나의 문자열로 만들어 주기 위해 " " 를 사용하여 ' /bin/autodig "/bin/bash ; my-pass" ' 로 작성한다.
성공하면 my-pass 에 해당하는 값인 "suck my brain"을 얻을 수 있다.
'Systemhacking > FTZ' 카테고리의 다른 글
[FTZ] level5 (0) | 2021.03.30 |
---|---|
[FTZ] level4 (0) | 2021.03.30 |
[FTZ] level2 (0) | 2021.03.25 |
[FTZ] level 1 (0) | 2021.03.25 |
[FTZ] trainer6 ~ trainer10 (0) | 2021.03.25 |