Ubuntu,CentOSでDEFCONの問題を解く / DEFCON問題環境構築手順

Ubuntu,CentOSDEFCONの問題を解く環境を構築する。

 

 

  • 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



 ・curlgcc とsocatをインストール 

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

 ・curlgccをインストール

 

yum install curl

yum install gcc

 

 ・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

 

でコンテナに接続する。

 

以上です。頑張って解きましょう