안녕하세요 Triumph 입니다.
Hackerschool의 워게임인 FTZ에서 level3단계 풀이를 하고자 합니다.
level3으로 로그인 후 힌트를 확인합니다.
힌트1 : autodig의 소스를 이용하여 level4의 권한을 얻어라 힌트2 : 동시에 여러 명령어 사용하는법 힌트3 : 문자열 형태로 명령어를 전달하는법 |
level1, level2 대비 힌트가 기네요..게다가 소스코드도 등장했습니다. 부족할까봐 추가힌트도 줬네요.
아마 autodig를 이용하여 level4의 권한을 얻으라는 것을 보니, level1, level2와 마찬가지로 setuid가 걸려 있을 것으로 추측됩니다.
autodig가 실행 중 쉘을 실행하려면 일단 autodig부터 분석 해야겠죠?
소스코드를 분석하기 이전에 소스코드에 등장하는 내용을 먼저 설명하겠습니다.
argc : 프로그램을 실행할 때 지정해 준 명령행 옵션의 개수 argv : 인자벡터 ex) [level3@ftz level3]$test.exe test2 //test.exe와 test가 실행되므로 argc는 2, argv[0]=test.exe, argv[1]=test 이다. strcpy : 문자열 복사 strcat : 문자열 붙이기 system : 해당 명령 실행 dig : DNS 질의응답 확인 |
이제 autodig의 소스코드를 분석해 봅시다.
#include <stdio.h> int main(int argc, char **argv){ char cmd[100]; if( argc!=2 ){ strcpy( cmd, "dig @" ); system( cmd ); } |
//헤더파일 include
//명령줄 라인개수가 2개가 아닐경우
|
소스코드를 분석한 내용을 바탕으로 유추할 수 있는 것들은 아래와 같습니다.
1. audodig 뒤에 인자가 1개여야 합니다.(인자가 1개가 아니면 argc!=2가 되어 종료됨)
2. argv[1]에 서버주소가 들어가면 해당 서버의 bind버전을 조회합니다.
autodig는 인자 값을 받아 해당 서버의 bind버전을 확인하는 프로그램인 것을 확인했습니다.
확인 해 봐야겠죠? 일단 autodig를 찾고, 실행해 봅니다.
인자 0, 1, 2개를 넣고 실행해본 결과, 1개인 경우 bind버전을 조회하고 다른 경우는 예상한 대로 메시지 출력 후 종료됩니다.
(localhost에 bind가 설치되어 있지 않아 인자 1개실행 했을 때 connection timed out 발생함)
이제 추가 힌트를 분석해 봅시다.
힌트2 : 동시에 여러 명령어 사용하는법
동시에 여러 명령어를 사용하는 법은 &입니다. &를 사용하여 여러 명령어를 한번에 전달해 보겠습니다.
&를 사용하여 echo test1과 echo test2가 동시에 실행된 것을 확인했습니다.
힌트3 : 문자열 형태로 명령어를 전달하는법
문자열 형태로 명령어를 전달하는법..문자열에서 감이 오시지 않나요? 답은 "(더블쿼터)입니다.
위처럼 &로 여러가지 명령을 사용하면 빈칸(space)이 생길 수 있습니다.
하지만 audodig는 하나의 인자 값만 입력 가능하기 때문에 "(더블쿼터)로 묶어 주어 여러 명령어를 실행하더라도
하나의 인자값으로 인식하도록 할 수 있습니다.
그럼 이제 답이 나왔죠 ? &를 사용하여 my-pass명령을 실행해 보겠습니다.
level4의 패스워드를 획득했습니다.
감사합니다.
'War Game > FTZ' 카테고리의 다른 글
Hackerschool FTZ 풀이 - LEVEL4 (0) | 2017.03.09 |
---|---|
Hackerschool FTZ 풀이 - LEVEL2 (0) | 2017.03.07 |
Hackerschool FTZ 풀이 - LEVEL1 (0) | 2017.03.07 |
Hackerschool FTZ 구축 (0) | 2017.02.15 |