1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】badstore-dockerの構築

Last updated at Posted at 2025-01-08

BadStoreのコンテナを立てた際の備忘録です。
脆弱性診断やDockerの操作を練習したい方の参考になれば幸いです。

目次

経緯

学校の授業の一環として、やられサイトのBadStoreをVM上に構築し、webアプリケーションの脆弱性について学習していましたが、不具合によって一時的にVMを使用できなくなってしまいました。
課題提出の期限もあったため、代替案としてDocker上にBadStoreの環境を新しく構築することにしました。

使用していた教材

使用環境

WSL2(Ubuntu)+Dockerの環境を既に構築していたため、そちらを使用しました。
環境を構築していない方は、以下の記事を参考にすると良いと思います。

BadStoreを動かす

BadStoreのコンテナイメージが配布されているため、こちらを使用します。

BadStoreのコンテナイメージの取得
sudo docker pull jvhoof/badstore-docker

私の環境では、既に80番ポートを使用していたため、8080番ポートからポートフォワードしました。
そのまま80番ポート経由でアクセスしたい場合、-p 8080:80と指定している部分を、-p 80:80と指定してください。

BadStoreコンテナ起動(ポート8080から80に繋がるようポートフォワード)
sudo docker run -d --name badstore --rm -i -p 8080:80 -t jvhoof/badstore-docker

起動できているか、プロセスを表示して確認します。

Dockerのプロセスを表示
sudo docker ps
実行結果(例)
$ sudo docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS         PORTS                                   NAMES
1434d549eb85   jvhoof/badstore-docker   "/usr/bin/supervisord"   10 seconds ago   Up 9 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   badstore

指定したコンテナイメージが動いており、起動していることが確認できました

dockerが動作しているホストにポート8080からアクセスすると、BadStoreのページが返ってきます。

WSLの場合は、http://localhost:8080
vmや別ホスト上のlinux端末上にDockerを構築している場合はhttp://(ホストのIPアドレス):8080で接続できます。

badstore-docker

BadStoreのシェルにアクセスする

ログファイル等を見るために、BadStoreが動いているコンテナのIDを指定して、シェルにアクセスします。

まず先ほどのdocker psの実行結果で表示された、BadStoreのコンテナIDを確認します。

docker psの実行結果
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS         PORTS                                   NAMES
1434d549eb85   jvhoof/badstore-docker   "/usr/bin/supervisord"   10 seconds ago   Up 9 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   badstore
    ↑これ

コンテナIDを指定して、コンテナ内のbashシェルを起動します。

sudo docker exec -it (コンテナID) /bin/bash

これでシェルにアクセスすることができます。

↓コンテナのシェルにrootでログインされる
root@(コンテナID):/var/www/html# 

アクセスログを確認

/var/log/apache2/access.logを確認してもログは出力されていませんでした。

ls -alで確認してもログファイルは0バイト
-rw-r----- 1 root adm      0 Jan  8 12:08 access.log
-rw-r----- 1 root adm      0 Jan  8 12:07 error.log

/etc/apache2/sites-available/badstore.confを確認すると以下のように記述されていました。

/etc/apache2/sites-available/badstore.conf
<VirtualHost *:80>
        ServerAdmin jvanhoof@barracuda.com
        DocumentRoot /data/apache2/htdocs

         ScriptAlias /cgi-bin/ /data/apache2/cgi-bin/
         <Directory "/data/apache2/cgi-bin">
                 AllowOverride None
                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                 Require all granted
         </Directory>

        <Directory />
                Options FollowSymLinks
                AllowOverride FileInfo
                Require all granted
        </Directory>

        ErrorLog /data/apache2/log/error.log
        CustomLog /data/apache2/log/access.log combined
</VirtualHost>

そのため、/data/apache2/log配下のファイルを参照すればログを見ることができます。

# tail -f /data/apache2/log/access.log
172.17.0.1 - - [08/Jan/2025:12:34:21 +0000] "GET /cgi-bin/badstore.cgi HTTP/1.1" 200 1382 "http://localhost:8080/cgi-bin/badstore.cgi" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
172.17.0.1 - - [08/Jan/2025:12:34:21 +0000] "GET /cgi-bin/bsheader.cgi HTTP/1.1" 200 604 "http://localhost:8080/cgi-bin/badstore.cgi" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"

/var/log配下に出力したい場合は、badstore.confを以下のように変更してください。

/etc/apache2/sites-available/badstore.conf(変更後)
<VirtualHost *:80>
        ServerAdmin jvanhoof@barracuda.com
        DocumentRoot /data/apache2/htdocs

         ScriptAlias /cgi-bin/ /data/apache2/cgi-bin/
         <Directory "/data/apache2/cgi-bin">
                 AllowOverride None
                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                 Require all granted
         </Directory>

        <Directory />
                Options FollowSymLinks
                AllowOverride FileInfo
                Require all granted
        </Directory>

        #元の設定をコメントアウト
        #ErrorLog /data/apache2/log/error.log
        #CustomLog /data/apache2/log/access.log combined

        #出力先を/var/log/apache2配下のログファイルに変更
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>
設定の反映
service apache2 restart

コンテナの停止

コンテナを停止する場合は、Dockerが動作しているホスト上で以下のコマンドを実行します。

sudo docker stop (コンテナ名)

今回はコンテナを起動するコマンドで、コンテナ名を"badstore"に指定しています。

sudo docker run -d --name badstore --rm -i -p 8080:80 -t jvhoof/badstore-docker
              ↑ nameオプションでコンテナ名を指定している

そのため、以下のコマンドでコンテナを停止できます。

sudo docker stop badstore
実行結果
$ sudo docker stop badstore
badstore

ちなみに、docker psの実行結果にもコンテナ名が表示されるため、分からなくなったらそちらを確認してください。

$ docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS         PORTS                                   NAMES
1434d549eb85   jvhoof/badstore-docker   "/usr/bin/supervisord"   10 seconds ago   Up 9 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   badstore
                                                                                                                                         ↑これ

docker psでコンテナを停止できているか確認します。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

dockerのプロセスが動いていないため、正常にコンテナを停止できています。

最後に

VM上に構築していた際、自動診断ツールなどを走らせたときに、途中からレスポンスが正常に返ってこない現象が発生していました。
VMのリソース不足かと思いましたが、スケールアップしても改善しませんでした。

こういったケースが発生した時の予備の環境として、今回の用意しておくのも良いと思います。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?