Hello there, ('ω')ノ
🎯 ラボの目的
このラボでは
- アプリがユーザー入力
filename内の../や..\を除去しますが、 - **1回だけ(非再帰的)**しか除去されないため、
- ネストトラバーサル文字列(
....//など)でバイパスできます。
目標:
/etc/passwd ファイルの内容を取得して提出
✅ 攻略手順(ステップバイステップ)
1️⃣ 商品画像取得リクエストをBurpでキャプチャ
例:
GET /loadImage?filename=218.png HTTP/1.1 Host: <LAB-ID>.web-security-academy.net
2️⃣ filenameパラメータをネストトラバーサルに改ざん
GET /loadImage?filename=....//....//....//etc/passwd HTTP/1.1 Host: <LAB-ID>.web-security-academy.net
✅ ポイント:
- 通常の
../は即ブロック or 除去 ....//はサーバー側の正規化で../に変換され、最終的にパストラバーサルが成立
3️⃣ リクエスト送信 → ファイル内容取得
- Repeaterで Send
レスポンスに Linuxサーバーの
/etc/passwd内容 が含まれる- 例:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ...
4️⃣ 解答提出
- 抜き出したファイル内容をコピー
- ラボ画面の Submit solution ボタンから提出
- ラボクリア🎉
✅ この攻撃の本質ポイント
| 攻撃条件 | 説明 |
|---|---|
| 非再帰的フィルター | 1回の../除去後に....// → ../化されバイパス成功 |
| サーバー側での正規化の甘さ | ライブラリやアプリのpath normalizer実装不備 |
| ネスト記法の有効性 | ....//, ....\/は非常に強力なバイパステクニック |
🎯 攻撃者視点の戦略
- 通常の
../../etc/passwd→ ブロック ..%2f..%2fetc/passwd→ ブロック- 最終手段 →
....//....//etc/passwdなどネスト式
→ 実務ペネトレーションテストでもこのネストパターンは超重要
✅ 開発者向け防御策
| 防御策 | 説明 |
|---|---|
OSのrealpath()やcanonicalize()関数でパス正規化 |
ネスト記法もすべて展開される |
| 入力値の除去ではなく 絶対パス確認 をする | /var/www/images/配下かチェック |
| ファイルパスはユーザー入力値から直接生成しない | IDやハッシュ等から内部的に決定 |
✅ まとめ
「フィルター = 安全」ではない! むしろ
- フィルター型防御は常にバイパスされる危険
- ネスト型パストラバーサルは現実でも非常に通用する ことがこのラボでよくわかります。
Best regards, (^^ゞ