Shikata Ga Nai

Private? There is no such things.

LAB: パストラバーサル(非再帰的トラバーサル文字列除去)攻略解説

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