Ubuntu,CentOSでDEFCONの問題を解く / DEFCON問題環境構築手順
Ubuntu,CentOSでDEFCONの問題を解く環境を構築する。
- Dockerを使って仮想環境上にDEFCON問題環境を作成する
今回DEFCON問題にチャレンジするにあたり公式より問題Dockerが配布されているのでそれを使用する
〇本資料で検証用に使用した環境
・Windows10_x64
・VMware 7.0
・CentOS_6.5_x64 or Ubuntu14.04_x64
・Docker_1.11.2
※個人で使用できる環境がある場合はそちらを使ってもらって構わない
なお、本資料は仮想環境上になんらかのOSがインストールされている状態を想定をしている。よって仮想環境の導入、LinuxOSのインストール、各ツールとOSの使用方法についての説明は省くものとする
※ Docker は64bit環境でないと動作しない
※エラーが出た場合はHyper-Vを停止させてください
windows の場合 コントロールパネル > プログラムと機能 > Windows機能の有効化または無効化 > Hyper-V のチェックを外す => 再起動
〇環境構築
環境準備
ここからは実際に環境の準備に関して説明する
※「1. OS別の環境構築」に関しては既にインストールが済んでいるものがあれば
飛ばしても問題はない
1. OS別の環境構築
1.1. ubuntuの場合
・事前にリポジトリアップデート
apt-get update
apt-get -y install curl
apt-get -y install gcc
apt-get -y install socat
・Dockerをインストール
curl -sSL https://get.docker.com/ | sh
1.2. CentOSの場合
・事前にリポジトリのアップデート
yum update
・Dockerをインストール
curl -sSL https://get.docker.com/ | sh
・socat コマンドをビルド
curl http://www.dest-unreach.org/socat/download/socat-1.7.2.4.tar.gz > socat.tar.gz
tar zxvf socat.tar.gz
cd socat-1.7.2.4
./configure
make
make install
2. xkcdをローカル環境で実行できるようにする
・githubからxkcdのプログラムをダウンロード
curl -sSL https://github.com/smokeleeteveryday/CTF_WRITEUPS/blob/master/2016/DEFCONCTF/babysfirst/xkcd/challenge/xkcd?raw=true > xkcd
・権限を書き換える
chmod 700 xkcd
・プログラムを実行させる。「Could not open the flag.」と表示されたら正常成功。
./xkcd
3. xkcdをリモート環境で実行できるようにする
・DEFCONの問題コンテナを落とす
DEFCON公式 https://hub.docker.com/u/legitbs/page?=1
今回は2問目の xkcd を落とす
docker pull legitbs/xkcd
上記のコマンドでダウンロード
また確認方法としては
docker images
このコマンドを入力することによってダウンロードされた
コンテナを一覧として見ることが出来る
※「docker pull legitbs/xkcd」を実行した際に
Post http:///var/run/docker.sock/v1.19/images/create?fromImage=legitbs%2Fxkcd%3Alatest: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
上記のエラーが発生する場合
service docker start
上記のコマンドを実行することで、解決できる場合がある
できない場合は配布image を利用する
・ネットワーク上から問題にアクセスするように実行する
本来この問題はネットワーク上でアクセスする問題なので
TCPのポート4000番でアクセスをすると問題を始めることが出来るようにする
socat は以下のようにすると TCP 4000 ポートで接続を待ち受けて、そのコマンドをサーバーとして実行できるようになる( コピペの場合は「”」を書き直して実行)
※4000番である根拠はない
TCP4000ポートでアクセスされると、パケットの中身を docker に渡して出力をネットワーク上に投げてくれるので TCP の Docker サーバになる
socat tcp-l:4000,reuseaddr,fork exec:"docker run -i legitbs/xkcd" &
バックグラウンドで動かしているため、何も表示されない
もしAddress already in useと出てしまったのであれば
裏でsocatが動いている可能性が高い。その場合は
killall socat
でkillしてあげるのがベスト。もしくは何もしなくていい
後はローカルに落としたxkcdをgbdやpedaを使って煮るなり焼くなりした後、コンテナ上に対してアプローチを掛ける
・アプローチするには、別ターミナル上からかホストOS のコンソールから
nc localhost 4000
でコンテナに接続する。
以上です。頑張って解きましょう