Dreamhack - file-special-bit (misc)

·2025년 11월 12일

Dreamhack-Writeups

목록 보기
47/52

file-special-bit (misc)

문제 링크

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

문제 설명

서버에서 작동하고 있는 서비스의 바이너리와 소스 코드가 주어집니다.

dream 유저의 권한으로 "flag" 파일을 읽으세요.

플래그의 형식은 DH{...} 입니다.

**ssh with 
id: chall
pw: dhbeginnerchall1**
**ssh chall@[hostname] -p [port]**

풀이과정

  1. dream 유저의 권한으로 flag를 획득하기 위해서는, 문제에 제시된 것 처럼 ssh 원격 서버 접근이 필요합니다. (SSH는 Secure Shell의 약자로, 보안이 확보된 채로 원격 컴퓨터에 접속해서 명령을 실행할 수 있게 해주는 네트워크 프로토콜입니다.)
    ssh chall@[hostname] -p [port] 를 통해 서버에 접근해줍니다.
  1. 주어진 c코드를 확인해봅니다.
if(ruid == getuid() && euid == geteuid()) {
    setreuid(geteuid(), geteuid());
    // ...
}

이 조건문을 통해 사용자의 ruid, euid가 프로그램이 실행될 때의 시스템 값 (getuid(), geteuid())와 정확히 일치해야 함을 알 수 있었습니다.

RUID는 프로세스를 실제로 시작하거나 소유한 사용자의 id 입니다.

EUID는 프로세스가 시스템 자원(파일, 장치 등)에 접근할 때 실제로 사용하는 권한 ID입니다.

이 둘을 구해 dream계정에 접근하는 것이 최종 목표입니다.

  1. RUID를 구하기 위한 리눅스 명령어는 id -u 입니다.
    id 명령어는 현재 사용자의 신원 정보를 출력합니다. -u 옵션은 id명령어에게 출력할 정보를 사용자 ID로 제한하라는 의미를 가집니다.
    즉, 위의 명령어는 실제 사용자의 UID, RUID의 값을 출력함을 알 수 있습니다.
  2. ls 명령어를 통해 flag 파일이 있음도 확인할 수 있었습니다.

  1. EUID를 구하기 위해 dream 유저의 uid를 구합니다.
    cat /etc/passwd | grep dream 을 이용합니다.
    cat /etc/passwd 를 통해 모든 사용자 계정의 password를 알 수 있습니다. |grep dream 을 통해 dream의 가진 값만 출력합니다.

이 명령어를 통해 2123이 EUID임을 알 수 있었습니다.

  1. ./chall ./flag 명령어를 통해 프로그램을 실행합니다. chall 프로그램에서 flag 파일을 읽으라는 명령어 입니다. 명령어를 입력하면 ruid와 euid를 입력하는 창이 뜹니다. 위에서 알아낸 값들을 입력하면 성공적으로 플래그를 획득할 수 있었습니다.


배운점

  • ssh 원격 환경에 대해 처음 접해보았는데, 이렇게 로컬환경에 접근할 수 있음을 알게 되었습니다.
  • 리눅스의 접근과 권한에 대한 기초 개념을 배울 수 있었습니다.
  • 리눅스 명령어들에 익숙해질 수 있었습니다.

Summary (English)

  • Obtained the flag for the dream user by SSHing into the remote server (ssh chall@[hostname] -p [port]).
  • The C program checks that RUID == getuid() and EUID == geteuid() before granting access.
  • Used id -u to get the RUID and cat /etc/passwd | grep dream to find the dream UID (EUID = 2123).
  • Ran ./chall ./flag, entered those RUID/EUID values, and retrieved the flag.
  • Learned basics of SSH, Linux user IDs, and common commands (id, cat, grep, ls).
profile
CTF 풀이 및 실습 중심 학습을 기록합니다.

0개의 댓글