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