https://dreamhack.io/wargame/challenges/895
서버에서 작동하고 있는 서비스의 바이너리와 소스 코드가 주어집니다.
dream 유저의 권한으로 "flag" 파일을 읽으세요.
플래그의 형식은 DH{...} 입니다.
**ssh with
id: chall
pw: dhbeginnerchall1**
**ssh chall@[hostname] -p [port]**
ssh chall@[hostname] -p [port] 를 통해 서버에 접근해줍니다.
if(ruid == getuid() && euid == geteuid()) {
setreuid(geteuid(), geteuid());
// ...
}
이 조건문을 통해 사용자의 ruid, euid가 프로그램이 실행될 때의 시스템 값 (getuid(), geteuid())와 정확히 일치해야 함을 알 수 있었습니다.
RUID는 프로세스를 실제로 시작하거나 소유한 사용자의 id 입니다.
EUID는 프로세스가 시스템 자원(파일, 장치 등)에 접근할 때 실제로 사용하는 권한 ID입니다.
이 둘을 구해 dream계정에 접근하는 것이 최종 목표입니다.
id -u 입니다.id 명령어는 현재 사용자의 신원 정보를 출력합니다. -u 옵션은 id명령어에게 출력할 정보를 사용자 ID로 제한하라는 의미를 가집니다.ls 명령어를 통해 flag 파일이 있음도 확인할 수 있었습니다.
cat /etc/passwd | grep dream 을 이용합니다.cat /etc/passwd 를 통해 모든 사용자 계정의 password를 알 수 있습니다. |grep dream 을 통해 dream의 가진 값만 출력합니다. 
이 명령어를 통해 2123이 EUID임을 알 수 있었습니다.
./chall ./flag 명령어를 통해 프로그램을 실행합니다. chall 프로그램에서 flag 파일을 읽으라는 명령어 입니다. 명령어를 입력하면 ruid와 euid를 입력하는 창이 뜹니다. 위에서 알아낸 값들을 입력하면 성공적으로 플래그를 획득할 수 있었습니다.
dream user by SSHing into the remote server (ssh chall@[hostname] -p [port]).id -u to get the RUID and cat /etc/passwd | grep dream to find the dream UID (EUID = 2123)../chall ./flag, entered those RUID/EUID values, and retrieved the flag.id, cat, grep, ls).