촉촉한초코칩

[Dreamhack] file-special-bit 본문

Study/MISC

[Dreamhack] file-special-bit

햄친구베이컨 2024. 9. 29. 21:50

 

코드

//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. 파일을 출력할 명령어 cmd에 cat <filename> 형식으로 파일 이름을 연결해서 만든다. (최대 19바이트)
  4. 사용자가 직접 자신의 실 사용자ID(ruid)와 유효 사용자 ID(euid)를 입력한다. getuid(), geteuid() 함수를 사용해 현재 프로세스의 실 사용자 ID와 유효 사용자 ID를 가져오고 일치할 경우 cat <filename>이 실행된다. 그리고 파일을 출력한다. 

 

공격

ssh로 들어가기 

 

유저 목록 보기

 

dream으로 들어가려 했으나 현재 id가 chall이기 때문에 들어갈 수 없음 

비밀번호를 알아봄

 cat /etc/passwd

x가 패스워드를 나타내는데, /etc/shadow 파일에 암호화되어 저장된다. 

계속 shadow 파일 읽기 권한을 얻는 걸 실패해서 코드의 취약점을 이용해서 dream으로 접속하려고 함 

 

ruid : /etc/passwd에서 3번째 자리

1) euid : 프로세스가 권한을 행사할 때 사용하는 ID -> 그렇다면 chall의 아이디..? 

2) 이번에는 euid에 root 아이디를 넣어봄

음..

모르겠어서 1번에서 쓴 걸 바꿔서 써봤는데 flag가 나왔다. 

그러면 ruid가 1000, euid가 2123이라는건데, 
ruid프로세스를 시작한 사용자의 실제 ID이므로 -> 내가(chall) 됨 
euid프로세스가 실행되는 동안 현재 적용되는 권한을 나타내는 사용자 ID -> dream의 권한으로 flag를 실행해야 하므로 dream이 됨 

어쩌다가 문제를 다 풀고 나서야 이해가 되었다..ㅋㅋ

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

[Dreamhack] 산타 할아버지도 힘들어요  (0) 2024.10.29
[Dreamhack] whatsdifferent  (1) 2024.10.02
[Dreamhack] Robot Only  (1) 2024.09.17
[Dreamhack] Snowing!  (0) 2024.09.17
[Dreamhack] addition-quiz  (0) 2024.09.11