Dreamhack/Dreamhack Wargame (Challenge)

[30] IT 비전공자 [dreamhack]file-special-bit문제 풀기

imaginefuture-1 2024. 10. 9. 10:20

 

와 벌써 30번째 문제네요...한달! 시간 정말 빠르네요!!

 

문제 풀어볼게요!!

 

 

SSH란 Secure SHell의 약자로써 네트워크상의 다른 컴퓨터에 로그인하여 명령을 실행하고 정보를 보고 받을수 있도록 해 주는 통신 프로토콜

 

우분투 가보자고~

 

 

 

 

소스코드입니다

 

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

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

int main(int argc, char *argv[]){
        if(argc == 2){
                char filename[10];
                char cmd[20];
                int ruid = 0;
                int euid = 0;
                memcpy(filename, argv[1], sizeof(filename));
                snprintf(cmd, 19, "cat %s", filename);
                printf("Your ruid : \n");
                scanf("%d", &ruid);
                printf("Your euid : \n");
                scanf("%d", &euid);
                if(ruid == getuid() && euid == geteuid()) {
                    setreuid(geteuid(), geteuid());
                    printf("Your ruid : %d Your euid : %d\n", getuid(), geteuid());
                    system(cmd);                   
                } else {
                    printf("No.\n");
                }

        }
        else {
            printf("argument...\n");
        }
        return 0;
}

 

 

 

 

 

 

ssh chall@host3.dreamhack.games -p 11162로  서버 접속후

ls로 확인하면

chall flag가 있다

./chall로 실행하면

./chall 명령어는 현재 작업 디렉토리에서 chall이라는 실행 파일을 실행하라는 의미입니다. 각 부분의 설명은 다음과 같습니다:

 

argument가 뜬다..,.

당신이 제공한 코드에서 "argument..."라는 출력은 프로그램이 인수의 수가 올바르지 않음을 나타내는 메시지입니다. 즉, 프로그램은 하나의 인수를 기대하고 있지만 사용자가 올바른 수의 인수를 제공하지 않았음을 의미합니다.
 

 

./chall flag로 실행하면

your ruid:

your euid가 뜬다

 

id를 입력하면 

uid=1000(chall) gid=1001(chall) groups=1000(chall)이 뜬다

ruid = 1000

euid를 알려면

id dream을 입력하면 된다

uid=2123(dream) gid=1001(dream) groups=1001(dream)

euid=2123

 

그러면 flag가 나온다.