[Dreamhack] file-special-bit Write-up

2025. 4. 2. 13:47보안/misc

728x90

ssh chall@[hostname] -p [port]

명령어를 통해 chall의 계정으로 진입해준다.

password를 치라고 나오고, 문제에 나와있는 패스워드를 입력하게 되면 문제로 진입할 수 있다.

홈 디렉터리에서 ls 명령어를 사용하면

chall flag 두 파일이 나오고 flag를 읽으려하면 권한이 없다고 나온다.

chall은 문제에서 코드를 줬으니 코드를 보자.

//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;
}

  • RUID : 프로세스를 실행한 사용자(Owner)의 UID
  • EUID : 실제로 프로세스가 사용하는 권한을 결정하는 ID

문제에서 dream이의 권한으로 flagt.txt를 읽으라고 힌트를 줬으므로

RUID를 chall의 ID, EUID는 dream의 ID로 입력해주면 될 것 같다.

ID를 확인해주면

이므로 파일을 실행시켜서

알맞게 입력해주면 flag를 구할 수 있다.

728x90

'보안 > misc' 카테고리의 다른 글

[Dreamhack] baby-linux Write-up  (0) 2025.04.02
[DreamHack] 64se64 Write-up  (0) 2024.12.27
[DreamHack] Exercise: Welcome-Beginners Write-up  (2) 2024.12.27
[DreamHack] dreamhack-tools-cyberchef Write-up  (1) 2024.12.27