2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CTF用にDockerでUbuntu環境作ってみた

Last updated at Posted at 2022-02-11

結論(2023年6月21日追記)

CTFはDockerじゃないほうがいいです!
普通にLinux動かせる環境を用意するのが良いでしょう!

作ることになった経緯

CTFを知る

最近CTFというものの存在を知って、CpawCTFというものに挑戦中です!
CTFとは、情報セキュリティの知識を使って解くパズルゲームのようなものです!
詳しくはこちらを読んでください!

やってみる

CpawCTFにこんな問題がありました。

このファイルを開きたいが拡張子がないので、どのような種類のファイルで、どのアプリケーションで開けば良いかわからない。
どうにかして、この拡張子がないこのファイルの種類を特定し、どのアプリケーションで開くか調べてくれ。
添付ファイル : hogehoge

curlコマンドでダウンロードして、添付ファイルを調べてみました!

zsh
% 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やっていく上で、この考えは危ない気がするが...。)

zhs
% ./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を作成

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もやってます!
技術系の発信はしていませんが、もしよければ仲良くしてください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?