[Dreamhack CTF] file-special-bit

Sungwuk·2024년 10월 9일
0

dreamhack

목록 보기
10/17

https://dreamhack.io/wargame/challenges/895

//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;
}
  1. 명령어 인자가 2개이다.
  2. 명령어 인자로 받은 파일 이름을 filename 배열에 복사한다. (최대 10바이트)
  3. cat <filename>을 저장한다.
  4. 사용자가 입력한 ruid, euid를 비교하여 프로그램와 일치하면 cat <filename>이 실행된다.

SSH로 들어가기

유저 목록 조회

root,dream으로 접속하고 싶지만 비밀번호를 모름

비밀번호 조회

cat /etc/passwd

ruid -> 프로세스에서 실제로 사용하는 ID -> chall ID -> 1000
euid -> 프로세스가 실행되는 동안 현재 적용되는 권한을 나타내는 사용자 ID -> dream의 id -> 2123

profile
보안전문가 꿈나무

0개의 댓글