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, (^^ゞ