結論(2023年6月21日追記)
CTFはDockerじゃないほうがいいです!
普通にLinux動かせる環境を用意するのが良いでしょう!
作ることになった経緯
CTFを知る
最近CTFというものの存在を知って、CpawCTFというものに挑戦中です!
CTFとは、情報セキュリティの知識を使って解くパズルゲームのようなものです!
詳しくはこちらを読んでください!
やってみる
CpawCTFにこんな問題がありました。
このファイルを開きたいが拡張子がないので、どのような種類のファイルで、どのアプリケーションで開けば良いかわからない。
どうにかして、この拡張子がないこのファイルの種類を特定し、どのアプリケーションで開くか調べてくれ。
添付ファイル : hogehoge
curlコマンドでダウンロードして、添付ファイルを調べてみました!
% curl -OL ダウンロードリンク
% chmod 755 hogehoge
% file hogehoge
hogehoge: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
なんだ、ただのバイナリファイルか!
実行してみよう!(CTFやっていく上で、この考えは危ない気がするが...。)
% ./hogehoge
zsh: exec format error: ./hogehoge
なんか実行できないみたいです!!!
いろいろ調べてみたところ、UNIX系のOSで実行できるバイナリファイルに、ELFは含まれていないみたいです...。
と゛お゛し゛て゛た゛よ゛お゛お゛お゛!
ということで、最近使えるようになったDockerでCTF用の環境作ることにしました!
インストールするコマンド
とはいっても、CTF超初心者なので、どんなツールをインストールすればよいのかわかりません!
とりあえず、CTF 必要 コマンド
でググってでてきたコマンドを使えるようにしておけばいいか!!!
そんな感じで、厳選されたコマンドたちを紹介します!
curl
問題で渡されたファイルを、こいつでダウンロードする。
わざわざクリックしてダウンロードなんかしないよ、だってそのほうがかっこいいもんね!!!!
file
拡張子が無いファイルが問題で出てくることがあるので、こいつでどんなファイルなのか調べる
unzip
これでzipファイルが解答できる
curl
でダウンロードしたファイルがzipだったとき、こいつで解答する
gcc
C言語ソースコードが出題されることがあるので、こいつでコンパイルする
-g -O0
オプションをつけることで、デバッグ情報を付与 & 最適化しないので、デバッグしやすくなるらしい!
gdb
デバッガ!
ブレークポイントを設定して、命令ごとに変数の変化を観察できたりするらしい!
便利!!!!
strings
ファイルにこいつを使うことで、文字列だけを見つけて表示してくれるみたい!
ファイル実行後は、きみにまかせるよ!
binutils
を入れると付いてくる
python
やっぱりpythonしか勝たん
いろいろとパッケージ入れるの面倒なので、Anacondaでインストールする!
DockerFileを作成
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
sudo \
vim \
curl \
file \
unzip \
gcc \
gdb \
binutils \
# 日本語化も忘れず
locales
RUN locale-gen ja_JP.UTF-8
ENV LANG=ja_JP.UTF-8
WORKDIR /opt
RUN curl -OL https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh && \
sh Anaconda3-2019.10-Linux-x86_64.sh -b -p /opt/anaconda3 && \
rm -rf Anaconda3-2019.10-Linux-x86_64.sh
ENV PATH /opt/anaconda3/bin:$PATH
RUN pip install --upgrade pip
COPY mount_folder /mount_folder
WORKDIR /
さらに必要なものがあれば、随時更新していきます!
日本語の文字化けが酷かったので、そっちも対応しておきました!
また、Dockerfile
と同じディレクトリ内にmount_folder
というディレクトリを作成し、コンテナ内にマウントするようにしてます!
コンテナ外で作成したファイルをコンテナ内に持っていきたい場合は、このmount_folder
にファイルを置いて、リビルドすればOKです!
とりあえずこれで、CTFのための最低限の準備ができましたパチパチ(拍手)
参考記事
最後に
DockerFileはGitHubに公開しているので公開しているので、ぜひ使ってください!
また、他にCTFに必要なツール等あれば、コメントやGitHubのissueで教えて下さい!
エンジニアのお友達が欲しくて、Twitterもやってます!
技術系の発信はしていませんが、もしよければ仲良くしてください!