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, (^^ゞ