본문 바로가기
Dreamhack WarGame

[Dreamhack] blue-whale 문제 풀이

by whiteTommy 2023. 11. 30.

.Dreamhack CTF Season 3 Round #4 (🌱Div2) 에 출제된 문제입니다

 

우선, 주어진 문제 파일을 통해 이미지 빌드를 위한 dockerfile을 다운로드하여서 Desktop/ex-docker에 저장하자.

 

그러고 나서, 문제에서 주어진 도커 이미지를 pull 명령어를 통해 다운해 보자.

docker pull dreamhackofficial/blue-whale:1
user@user:~$ cd Desktop/ex-docker
user@user:~/Desktop/ex-docker$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hustoj        latest    2488c09c943e   2 months ago    1.48GB
ubuntu        22.04     9d28ccdc1fc7   24 months ago   76.3MB
hello-world   latest    feb5d9fea6a5   2 years ago     13.3kB
user@user:~/Desktop/ex-docker$ docker pull dreamhackofficial/blue-whale:1
1: Pulling from dreamhackofficial/blue-whale
6e3729cf69e0: Already exists 
27795aba362d: Already exists 
382b42bad09d: Already exists 
957e6ff40500: Already exists 
72d2dc9f485f: Already exists 
cfff9de3e1e7: Already exists 
a3ed95caeb02: Already exists 
fb90d72728f2: Already exists 
e0c144699be7: Already exists 
Digest: sha256:6bcfd56d243ab37ede113aa8a6243eb3f274ae8971ff1eefc67796329c252fee
Status: Downloaded newer image for dreamhackofficial/blue-whale:1
docker.io/dreamhackofficial/blue-whale:1
user@user:~/Desktop/ex-docker$ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
hustoj                         latest    2488c09c943e   2 months ago    1.48GB
dreamhackofficial/blue-whale   1         87a96c7a8db0   6 months ago    152MB
ubuntu                         22.04     9d28ccdc1fc7   24 months ago   76.3MB
hello-world                    latest    feb5d9fea6a5   2 years ago     13.3kB

 

그러면, dreamhackofficial/blue-whale 레포지토리의 docker image가 생성이 된다는 사실을 docker images 명령어를 통해 확인할 수 있다.

 

이제, 문제 파일의 dockerfile을 살펴보자.

FROM ubuntu:22.04@sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9

ENV user chall
ENV chall_port 31337

RUN apt-get update
RUN apt-get install -y python3

RUN adduser $user

COPY ./deploy/flag /home/$user/flag

RUN chown -R root:$user /home/$user

WORKDIR /home/chall
RUN touch `python3 -c "print(open('./flag', 'r').read())"`
RUN rm *

WORKDIR /home
USER $user
EXPOSE $chall_port

 

위의 내용을 보면, deploy 디렉터리 안에 있는 flag 파일을 /home/chall/flag에 복사를 하고,  touch 명령어를 통해./flag파일을 열어서 읽고 출력이 된 것을 파이썬 명령어로 실행하므로 flag 파일 내용(플래그)을 이름으로 갖는 파일이 생성된다는 사실을 알 수 있다. 

 

하지만, 그다음의 명령어를 보면 현재 디렉터리인 home/chall 에 존재하는 모든 파일을 삭제하는 명령어인 RUN rm * 를 볼 수 있고, 문제에서 구하고자 하는 플래그를 찾기 위해서는 삭제가 되기 이전에 대한 정보를 얻어야 한다는 사실을 알 수 있다.

 

문제에서 힌트를 보면 docker 이미지를 분석하는 도구인 dive에 대한 설명이 있는데, dive를 우선 설치해 보자.

 

이제, dive [이미지 ID] 명령어를 실행해 보자.

user@user:~/Desktop/ex-docker$ dive 87a96c7a8db0
Image Source: docker://87a96c7a8db0
Fetching image... (this can take a while for large images)
Analyzing image...
Building cache...

 

그러면, 아래와 같은 화면이 출력된다.

 

이를 통해 도커 이미지를 분석할 수 있으며, 좌측 상단의 Layers 탭에서는 dockerfile에 명시된 명령어 한 줄씩 내려가며 각 layer를 분석할 수 있고, 우측 상단의 Current Layer Contents 탭에서는 해당하는 Layer의 콘텐츠(파일 목록)가 출력된다.

 

이를 통해 flag 파일이 삭제가 되기 이전의 Layer까지만 도커 이미지에 대한 정보를 확인해 보자.

 

/home/chall 에서 플래그를 얻었다.

 

하지만, 위의 화면은 숫자가 잘려있어서, font size를 줄여서 확인해 보면 찾고자 하는 플래그는 다음과 같다.

DH{b06cb27a502a831822f927562258c6f69b5996a9916206cdb8755cc90ebf3b9f}

 

'Dreamhack WarGame' 카테고리의 다른 글

[Dreamhack] xss-1 문제 풀이  (0) 2024.01.06
[Dreamhack] Cookie 문제 풀이  (2) 2024.01.04
[Dreamhack] phpreg 문제 풀이  (1) 2023.11.28
[Dreamhack] ex-reg-ex 문제 풀이  (1) 2023.11.28
[Dreamhack] Exercise: SSH 문제 풀이  (0) 2023.11.20