Shikata Ga Nai

Private? There is no such things.

パストラバーサル診断マニュアル(Path Traversal)

Hello there, ('ω')ノ

🎯 1. パストラバーサルとは?

パストラバーサル(Path Traversal)とは、アプリケーションが読み込むファイルのパスにユーザ入力を使っている場合に、 ../(親ディレクトリを示す記号)などを悪用して、本来アクセスできないファイルを読み出す攻撃です。


📂 例(脆弱な実装)

filename = request.GET['file']
open("/var/www/uploads/" + filename)

→ ユーザが file=../../../../etc/passwd を指定すると…

open("/var/www/uploads/../../../../etc/passwd")  
→ 実質的に /etc/passwd を読み取れてしまう

🧭 2. チェックすべきページ・機能一覧

機能・ページ 検査対象のパラメータ例 備考
📄 ファイル閲覧 ?file=report.pdf PDF, TXT, LOGなどを開く機能
🖼️ 画像表示 ?img=photo.jpg アップロード画像以外のアクセス可否
📥 ファイルダウンロード download?filename=sample.txt 拡張子を変えて読み込みテスト
📑 ログ表示画面 log=access.log システムのログファイル等にアクセス
📂 任意パス指定API JSON: "path": "docs/a.pdf" REST APIやGraphQLでも起こり得る

🛠️ 3. 診断方法(手順)

  1. ユーザ入力でファイル名・パスが指定される機能を探す
  2. そのパラメータに ../ を繰り返し付加したパスを指定
  3. /etc/passwd(Linux)や boot.ini(Windows)などを狙って読み取りを試す
  4. ファイル内容が表示された場合、パストラバーサル脆弱性あり

🧪 4. よく使うテストペイロード

OS ペイロード例 備考
Linux ../../../../etc/passwd ユーザ情報が見えるファイル
Windows ..\..\..\..\boot.ini 古いWindowsの設定ファイル
エンコード版 ..%2f..%2f..%2fetc/passwd %2f/ のURLエンコード
変種 ....//....//etc/passwd フィルター回避を狙う

🧾 5. 成功のサイン(例)

✅ Linux環境の場合:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

✅ Windows環境の場合:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
...

🎯 6. アップロードディレクトリを利用した判別例

GET /view?file=uploads/user1/image.png
→ これを ../ で戻って「他のユーザのファイル」にアクセスできるか?

⚠️ 7. 注意点・ベストプラクティス

  • 🔐 ファイル名が固定でない(動的指定)箇所が狙われやすい
  • 📂 ../ 以外にもURLエンコードや変種が効くことがある
  • 📄 ファイルの存在判定でエラーメッセージがヒントになる
  • 🛑 重要ファイルを読めたからといって削除・改変はしない

🧰 8. 補助ツール

  • Burp Suite(Repeater):パスを1文字ずつ調整して確認
  • dirb / gobuster:パストラバーサル可能なパラメータの列挙
  • ffuffile=FUZZ に対して辞書でファイル名を総当たり

🔑 見つけやすいキーワード・ヒント

  • file=, filename=, path=, log=, document=
  • URLやフォームでファイル名を指定する機能
  • "not found", "permission denied", "invalid path" などのエラー

Best regards, (^^ゞ