KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

WEB+DB PRESS特集 脆弱性攻撃体験用の環境を構築する

2018年2月に発売された、WEB+DB PRESS Vol.103の特集「体験!脆弱性の見つけ方&ふさぎ方」の演習で使用するアプリケーションの環境を構築した。

gihyo.jp

本書ではDocker、もしくはVirtualBoxで環境構築する方法が説明されているが、今回はDockerに慣れることも視野に入れてDockerで環境を構築することにした。

Bad SNSの環境構築

脆弱性攻撃を体験するWebアプリケーションをDockerで構築する。

Dockerのバージョン

f:id:masayuki_kato:20180327224311p:plain

Dockerfileの入手

wgetコマンドでDockerファイルが含まれる圧縮ファイルを入手する。

BadSNS $pwd
${HOME}/Practice/BadSNS
BadSNS $wget https://github.com/nishimunea/badsns/archive/master.zip
--2018-03-27 22:40:58--  https://github.com/nishimunea/badsns/archive/master.zip
github.com (github.com) をDNSに問いあわせています... 192.30.255.113, 192.30.255.112
github.com (github.com)|192.30.255.113|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://codeload.github.com/nishimunea/badsns/zip/master [続く]
--2018-03-27 22:40:59--  https://codeload.github.com/nishimunea/badsns/zip/master
codeload.github.com (codeload.github.com) をDNSに問いあわせています... 192.30.255.121, 192.30.255.120
codeload.github.com (codeload.github.com)|192.30.255.121|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1043718 (1019K) [application/zip]
`master.zip' に保存中

master.zip                100%[====================================>]   1019K  1.03MB/s 時間 1.0s

2018-03-27 22:41:00 (1.03 MB/s) - `master.zip' へ保存完了 [1043718/1043718]

BadSNS $ls
master.zip

自分のパソコンにwgetコマンドがインストールされていない場合にはGithubから直接ファイルをダウンロードする。

github.com

圧縮ファイルを入手したら展開する。

BadSNS $unzip master.zip
Archive:  master.zip
07a22c7e122ea4f63f852d18aa0b9f18d086c264
   creating: badsns-master/
 extracting: badsns-master/.gitignore
  inflating: badsns-master/Dockerfile
  inflating: badsns-master/README.md

...中略...
  inflating: badsns-master/files/sns/public/register.html
  inflating: badsns-master/files/sns/public/robots.txt
BadSNS $ls
badsns-master   master.zip

展開後、Dockerfileのあるディレクトリまで移動し、Dockerコンテナを構築・起動するコマンドを実行する。

BadSNS $cd badsns-master
badsns-master $ls
Dockerfile  README.md   files
badsns-master $docker build -t local/badsns .
... 中略 ...
Successfully built 034ad80bc2a8
Successfully tagged local/badsns:latest
badsns-master $docker run --privileged -d --rm -p 10080:80 --name badsns local/badsns

Dockerが起動したら「http://localhost:10080/」にアクセスしてbadSNSのログイン画面が表示されることを確認する。

f:id:masayuki_kato:20180327230430p:plain

BadSNSの利用

上記の手順が完了したらブラウザ上でログイン画面の右下にある「新規利用はこちら」ボタンをクリックする。

f:id:masayuki_kato:20180327230718p:plain

新規登録するユーザ情報を入力したらメイン画面に遷移する。

f:id:masayuki_kato:20180327231505p:plain

Bad SNS for Androidの利用

脆弱性を持ったAndroidアプリの動作環境としてAndroid Studioに付属するエミュレータを利用する。

エミュレータの準備

Android DevelopersのサイトからAndroid Studioをダウンロードする。

developer.android.com

ダウンロードしたファイルを実行し、全て初期設定でインストールを行う。

インストールが完了したらAndroid Studioを起動し、「Start a new Android Studio project」を選択する。

f:id:masayuki_kato:20180327232217p:plain

プロジェクトの作成画面では全て「Next」を選択し、最後に「Finish」をクリックする。

そうすると、プロジェクト画面が開きブロジェクトのビルドが開始されるので、画面下のターミナルに「Install missing platform(s) and sync project」といったエラーが表示される。

f:id:masayuki_kato:20180327232826p:plain

なので、エラーが解消されるまで何回かクリックして必要なモジュールのインストールを行う。

f:id:masayuki_kato:20180327232921p:plain

f:id:masayuki_kato:20180327233146p:plain

ビルドが正常に完了するようになると、画面上部のツールバーから「Tools -> Android -> AVD Manager」を選択する。

f:id:masayuki_kato:20180327233630p:plain

「Android Virtual Device Manager」画面が開くので画面下部にある「Create Virtual Device」を選択し、下記の要領で選択していく。

f:id:masayuki_kato:20180327234007p:plain

  • Category
    • Phone
  • Name
    • Nexus5X

「Next」をクリックする。

f:id:masayuki_kato:20180327233928p:plain

「x86 Images」タブを開き、下記の条件に合致した列を選択する。

  • Release Name
    • Oreo
      • Downloadという文字が表示されている場合はクリックしてダウンロードをしておく
  • API Level
    • 26
  • ABI
    • x86
  • Target
    • Android8.0 (Google Play)

「Next」をクリックする。

f:id:masayuki_kato:20180327234627p:plain

「Device Frame」欄のチェックボックスを外し、「Finish」をクリックする。

f:id:masayuki_kato:20180327235625p:plain

作成したVirtual Deviceの右側にある、緑の三角ボタンをクリックしてエミュレータを起動する。

f:id:masayuki_kato:20180327235711p:plain

f:id:masayuki_kato:20180327235849p:plain

PATHを通す

Android SDKのplatform-toolsへのPATHを通す。

Macのコンソール画面から次のように設定する。

badsns-master $vim ~/.bash_profile

開いた「.bash_profile」の末尾に下記の行を追記する。

export PATH=$PATH:~/Library/Android/sdk/platform-tools/

PATHが通ったかを確認する。

badsns-master $source ~/.bash_profile
badsns-master $echo ${PATH}
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${HOME}/Library/Android/sdk/platform-tools/

adbコマンドを実行する。

platform-toolsへのPATHが通って入れば成功するはず。

badsns-master $adb
Android Debug Bridge version 1.0.39
Version 0.0.1-4500957
... 中略 ...

Bad SNS for Android のインストール

wgetコマンドでapkファイルをダウンロードする。wgetコマンドが実行できない場合には直接Githubからダウンロードしてくる。

github.com

badsns-master $wget https://github.com/harupu/badsns-android/releases/download/v1.0/badsns-android_v1.0.apk
--2018-03-28 00:12:04--  https://github.com/harupu/badsns-android/releases/download/v1.0/badsns-android_v1.0.apk
github.com (github.com) をDNSに問いあわせています... 192.30.255.112, 192.30.255.113
github.com (github.com)|192.30.255.112|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://github-production-release-asset-2e65be.s3.amazonaws.com/116907174/de9a54c6-f618-11e7-899e-cc5f81ac6eca?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180327%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20180327T151204Z&X-Amz-Expires=300&X-Amz-Signature=9df586d9776cfba185a1fb758754358e702368bd4e4077c8f6b63c7884c76c87&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dbadsns-android_v1.0.apk&response-content-type=application%2Fvnd.android.package-archive [続く]
--2018-03-28 00:12:04--  https://github-production-release-asset-2e65be.s3.amazonaws.com/116907174/de9a54c6-f618-11e7-899e-cc5f81ac6eca?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180327%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20180327T151204Z&X-Amz-Expires=300&X-Amz-Signature=9df586d9776cfba185a1fb758754358e702368bd4e4077c8f6b63c7884c76c87&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dbadsns-android_v1.0.apk&response-content-type=application%2Fvnd.android.package-archive
github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com) をDNSに問いあわせています... 52.216.85.19
github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.85.19|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2333301 (2.2M) [application/vnd.android.package-archive]
`badsns-android_v1.0.apk' に保存中

badsns-android_v1.0.apk   100%[====================================>]   2.22M   944KB/s 時間 2.4s

2018-03-28 00:12:08 (944 KB/s) - `badsns-android_v1.0.apk' へ保存完了 [2333301/2333301]

apkコマンドを実行する。

badsns-master $ls
Dockerfile      README.md       badsns-android_v1.0.apk files
badsns-master $adb install badsns-android_v1.0.apk
Success

エミュレータから「BAD SNS」アプリケーションを起動する。

f:id:masayuki_kato:20180328001556p:plain

事前にMacのターミナル上から「ifconfig」コマンドを実行し、IPアドレスを取得しておく。

「BAD SNS」アプリが起動するとサーバ設定を行う画面が表示されるので、「サーバ ホスト名 or IP」の項目に取得したIPアドレスを入力する。「サーバ ポート」の項目には「10080」を入力し、画面左上にある左矢印ボタンを押してログイン画面に遷移する。

f:id:masayuki_kato:20180328002028p:plain

「ログイン」ボタンを押し、「ログインに失敗しました」というメッセージが表示されればサーバのエラーを正しく受信できている。

f:id:masayuki_kato:20180328002602p:plain