
実際のケース(ペネトレーションテストやBug Bountyプログラム)で見つかった脆弱性を含むWebアプリケーション。
Web Hacking Playgroundは、制御されたWebハッキング環境です。実際のペンテストやBug Bountyプログラムで見つかった脆弱性で構成されています。目的は、ユーザーがそれらを練習し、検出および悪用する方法を学ぶことです。
また、カスタムペイロードを作成してフィルターをバイパスする方法、さまざまな脆弱性を悪用した連鎖攻撃の実行、概念実証スクリプトの開発など、その他の関心事項も扱います。
アプリケーションのソースコードは表示可能です。ただし、ラボのアプローチはブラックボックス型です。したがって、チャレンジを解決するためにコードを確認すべきではありません。
また、ファジング(パラメータとディレクトリの両方)やブルートフォース攻撃は、このラボでは利点をもたらさないことに注意してください。
このラボを実行するには、Kali Linux を使用することをお勧めします。仮想マシンを使用する場合は、VMware Workstation Player ハイパーバイザーを使用することを推奨します。
環境はDockerとDocker Composeに基づいているため、両方がインストールされている必要があります。
Kali LinuxにDockerをインストールするには、次のコマンドを実行します。
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker --now
他のDebianベースのディストリビューションにDockerをインストールするには、次のコマンドを実行します。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker --now
Docker Composeをインストールするには、次のコマンドを実行します。
sudo apt install -y docker-compose
注意: M1を使用する場合は、イメージをビルドする前に次のコマンドを実行することをお勧めします。
export DOCKER_DEFAULT_PLATFORM=linux/amd64
次のステップは、リポジトリをクローンしてDockerイメージをビルドすることです。
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose build
また、Foxy Proxy ブラウザ拡張機能(プロキシ設定を簡単に変更できる)と、HTTPリクエストをインターセプトするために使用する Burp Suite をインストールすることをお勧めします。
Foxy Proxyで新しいプロファイルを作成してBurp Suiteをプロキシとして使用します。これを行うには、Foxy Proxyのオプションに移動し、次の構成でプロキシを追加します。
必要なものがすべてインストールされたら、次のコマンドで環境をデプロイできます。
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose up -d
これにより、ポート80でFlaskで開発された2つのアプリケーションコンテナが作成されます。
コンテナのIPを /etc/hosts ファイルに追加して、名前でアクセスできるようにし、エクスプロイトサーバーが脆弱なWebアプリケーションと通信できるようにする必要があります。これを行うには、次のコマンドを実行します。
sudo sed -i '/whp-/d' /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-socially) whp-socially" | sudo tee -a /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-exploitserver) whp-exploitserver" | sudo tee -a /etc/hosts
これが完了すると、脆弱なアプリケーションには http://whp-socially からアクセスでき、エクスプロイトサーバーには http://whp-exploitserver からアクセスできます。
エクスプロイトサーバーを使用する場合は、上記のURLを使用し、IPではなくドメイン名を使用する必要があります。これにより、コンテナ間の正しい通信が保証されます。
ハッキングに関しては、攻撃者のサーバーを表すためにローカルのDocker IPを使用する必要があります。これは、ラボがBurp CollaboratorやInteractshなどの外部サーバーへのリクエストを行うことを意図していないためです。Python http.server を使用してWebサーバーをシミュレートし、HTTPインタラクションを受信できます。これを行うには、次のコマンドを実行します。
sudo python3 -m http.server 80
環境は3つのステージに分かれており、それぞれに異なる脆弱性があります。後のステージの脆弱性は前のステージの脆弱性に基づいているため、順番に行うことが重要です。ステージは次のとおりです。
以下は、各ステージの脆弱性のネタバレです。ヘルプが必要ない場合は、このセクションをスキップできます。一方、どこから始めればよいかわからない場合や、正しい方向に進んでいるか確認したい場合は、該当するセクションを展開できます。
このステージでは、クロスサイトスクリプティング(XSS)を介して特定のユーザーのセッションを盗むことができます。これにより、JavaScriptコードの実行が可能になります。これを行うには、被害者がユーザーのコンテキストでURLにアクセスできる必要があります。この動作はエクスプロイトサーバーでシミュレートできます。
このステージを解決するためのヒントは次のとおりです。
このステージでは、管理者としてアクセスできるトークンを生成できます。これは典型的なJSON Web Token(JWT)攻撃であり、トークンペイロードを変更して権限を昇格させることができます。
このステージを解決するためのヒントは、JWTを受け取ると有効なセッションCookieを返すエンドポイントが存在することです。
このステージでは、サーバーサイドテンプレートインジェクション(SSTI)の脆弱性を介して /flag ファイルを読み取ることができます。これを行うには、アプリケーションがサーバー上でPythonコードを実行させる必要があります。サーバー上でシステムコマンドを実行することが可能です。
このステージを解決するためのヒントは次のとおりです。
脆弱な機能は二要素認証によって保護されています。したがって、SSTIを悪用する前に、OTPコードリクエストをバイパスする方法を見つける必要があります。アプリケーションが同じサーバーからのリクエストを信頼する場合があり、HTTPヘッダーがこの状況で重要な役割を果たします。
SSTIはブラインドです。つまり、サーバー上で実行されたコードの出力は直接取得されません。Pythonのsmtpdモジュールを使用すると、受信したメッセージを標準出力に出力するSMTPサーバーを作成できます。
sudo python3 -m smtpd -n -c DebuggingServer 0.0.0.0:25
アプリケーションはFlaskを使用しているため、テンプレートエンジンはJinja2であると推測できます。これはFlaskの公式ドキュメントで推奨されており、広く使用されています。最終的なフラグを取得するには、Jinja2互換のペイロードを入手する必要があります。
メールメッセージには文字数の制限があります。この制限を回避する方法に関する情報はインターネットで見つけることができます。
各ステージの詳細な解決策は、Solutions フォルダにあります。
次のリソースは、ステージを解決するのに役立つ可能性があります。
プルリクエストは歓迎します。バグを見つけた場合は、issueを開いてください。