촉촉한초코칩

[Dreamhack] whatsdifferent 본문

Study/MISC

[Dreamhack] whatsdifferent

햄친구베이컨 2024. 10. 2. 00:10

 

코드

// Name: chall.c
// Compile Option: gcc chall.c -o chall -fno-stack-protector

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>

#define FLAG_SIZE 0x45

void alarm_handler() {
    puts("TIME OUT");
    exit(-1);
}

void initialize() {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    signal(SIGALRM, alarm_handler);
    alarm(30);
}


int main(int argc, char *argv[]) {
    char cmd[50];
    char input[21];
    char filter[] = {'&', ';', '|', '$', '`', '*','[', ']', '{', '}', '\\', '^', '~', '?', '#', '!'};

    initialize();
    system("ls -al");
    printf("Input Command: \n");
    scanf("%20[^\n]", input);

    // filtering
    for (int i = 0; i < strlen(input); i++){
        for (int j = 0; j < sizeof(filter); j++){
            if(input[i] == filter[j]){
                printf("filtered.\n");
                exit(0);
            }
        }
    }

    snprintf(cmd, 49, "(%s) > /dev/null", input);

    system(cmd);
    system("cat ./out");
    printf("Terminated\n");

    return 0;
}

 

필터링 값이 들어가지 않은 input을 받는데, input > /dev/null을 실행해서 그 결과를 출력한다..? 

> /dev/null은 로그파일을 지우거나 출력 내용을 지우는데 사용된다고 한다. 

 

그러면 input으로 입력된 게 저장되는 곳이 없는데.. 

 

공격

문제 서버로 들어간다. 

nc host3.dreamhack.games 22727

 

명령어는 한번만 입력 가능한 것 같다. 

 

우선 fs 파일을 복사해서 fs_1 파일을 만들어보았다. 

cp fs fs_1

 

두 파일의 차이점을 알아본다. diff, cmp 다 써봤는데 안 됨 

 

fs_1 파일을 만들고 fs_1을 읽는 명령어를 써보려고 함  안됨 

cp fs fs_1
cat fs_1

 

https://yenas0.tistory.com/122

마지막에 out파일을 출력하기 때문에 파일 두개를 비교하고 그 값을 out으로 보낸다.

 

전에 그렇게 했었는데..ㅎ 코드 보고 다시 생각하기......

'Study > MISC' 카테고리의 다른 글

[Dreamhack] Just read flag  (0) 2024.11.13
[Dreamhack] 산타 할아버지도 힘들어요  (0) 2024.10.29
[Dreamhack] file-special-bit  (0) 2024.09.29
[Dreamhack] Robot Only  (1) 2024.09.17
[Dreamhack] Snowing!  (0) 2024.09.17