Hello there, ('ω')ノ
🎯 このラボの目的
このラボでは、Webキャッシュデセプション(Web Cache Deception, WCD)攻撃を利用して、他ユーザー(carlos)のAPIキーを取得する方法を学びます。WCD攻撃は、キャッシュサーバーとオリジンサーバーのURLパスマッピングの違いを悪用し、動的なコンテンツを誤ってキャッシュさせる手法です。
🧪 攻撃の手順
1. ターゲットエンドポイントの特定
- Burp Suiteのブラウザで、
wiener:peterの資格情報を使用してアプリケーションにログインします。 /my-accountページにアクセスし、レスポンスに自分のAPIキーが含まれていることを確認します。
2. パスマッピングの違いの特定
- Burp SuiteのProxyタブで、
GET /my-accountリクエストを右クリックし、「Send to Repeater」を選択します。 Repeaterタブで、パスを
/my-account/abcに変更し、リクエストを送信します。- レスポンスにAPIキーが含まれていれば、オリジンサーバーが追加のパスセグメントを無視していることを示しています。
パスを
/my-account/abc.jsに変更し、リクエストを送信します。- レスポンスヘッダーに
X-Cache: missとCache-Control: max-age=30が含まれていれば、キャッシュがこのレスポンスを保存する可能性があります。
- レスポンスヘッダーに
- 同じリクエストを30秒以内に再送信し、
X-Cache: hitに変わっていれば、レスポンスがキャッシュから提供されていることを示しています。
3. 悪意のあるURLの作成と配信
Burp Suiteのブラウザで、「Go to exploit server」をクリックします。
Bodyセクションに以下のスクリプトを入力し、
YOUR-LAB-IDを実際のラボIDに置き換えます。
<script>
document.location="https://YOUR-LAB-ID.web-security-academy.net/my-account/wcd.js"
</script>
「Deliver exploit to victim」をクリックして、carlosユーザーにこのURLを開かせます。
- carlosがこのURLにアクセスすると、そのレスポンスがキャッシュに保存されます。
4. キャッシュされたレスポンスからAPIキーを取得
- ブラウザで以下のURLにアクセスします。
https://YOUR-LAB-ID.web-security-academy.net/my-account/wcd.js
レスポンスにcarlosのAPIキーが含まれていることを確認し、コピーします。
ラボの「Submit solution」セクションにAPIキーを入力して、ラボを完了します。
🧠 攻撃成功のポイント
- オリジンサーバーのパス解釈: オリジンサーバーが追加のパスセグメント(例:
/abc)を無視するかどうかを確認します。 - キャッシュサーバーの拡張子ルール: キャッシュサーバーが特定の拡張子(例:
.js)を持つリクエストをキャッシュするかどうかを確認します。 - キャッシュの有効期間:
Cache-Controlヘッダーのmax-age値を確認し、キャッシュの有効期間内にリクエストを再送信して、キャッシュが機能していることを確認します。
✅ まとめ
このラボでは、オリジンサーバーとキャッシュサーバーのURLパスマッピングの違いを悪用して、他ユーザーの機密情報を取得するWebキャッシュデセプション攻撃の手法を学びました。実際のアプリケーションでも、同様の脆弱性が存在する可能性があるため、キャッシュの設定やURLの処理方法には注意が必要です。
Best regards, (^^ゞ