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. 診断方法(手順)
- ユーザ入力でファイル名・パスが指定される機能を探す
- そのパラメータに
../を繰り返し付加したパスを指定 /etc/passwd(Linux)やboot.ini(Windows)などを狙って読み取りを試す- ファイル内容が表示された場合、パストラバーサル脆弱性あり
🧪 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:パストラバーサル可能なパラメータの列挙
- ffuf:
file=FUZZに対して辞書でファイル名を総当たり
🔑 見つけやすいキーワード・ヒント
file=,filename=,path=,log=,document=- URLやフォームでファイル名を指定する機能
"not found","permission denied","invalid path"などのエラー
Best regards, (^^ゞ