Hello there, ('ω')ノ
RESTful API は、データやリソースをURLパス内に含めて表現するのが一般的です。これにより、URL自体が“パラメータの一部”になるため、パスの構造を操作してサーバー内部APIに影響を与える攻撃が成立することがあります。
🎯 目的
URLパス中のパラメータ(例:ユーザー名など)に対して、パストラバーサル構文(../
)をエンコードして注入し、REST APIのルーティングやアクセス制御をバイパスできるかを確認する。
🔍 攻撃対象例
通常のリクエスト:
GET /edit_profile.php?name=peter
→ サーバー内部で以下のAPIに変換されると想定:
GET /api/private/users/peter
🧪 攻撃リクエスト:パス操作を試す
GET /edit_profile.php?name=peter%2f..%2fadmin
📌 %2f
= /
、..
= 上位ディレクトリ → 結果として以下のように構築される可能性:
GET /api/private/users/peter/../admin
💥 サーバーがこのパスを「正規化(normalize)」すれば:
→ /api/private/users/admin
👉 本来アクセスできない管理者アカウントのプロフィールを参照できてしまう!
🔍 挙動からの判定ポイント
観察結果 | 解釈 |
---|---|
admin ユーザーの情報が表示された |
パス正規化され、攻撃成功! |
404 Not Found |
不正なパスであるが、処理がされた形跡あり → 追加調査の価値あり |
Invalid username のようなエラー |
サーバー側が名前をパスとして扱っている可能性大 |
正常に peter の情報が返る |
パストラバーサルが無視された or エンコードが適用されなかった可能性 |
🔁 その他試すべきバリエーション
試すパターン | 内容 |
---|---|
%2e%2e |
.. の別エンコード形式 |
peter%2f..%2fadmin%2fprofile |
管理者の子リソースを狙う場合 |
%252e%252e |
二重エンコード(WAFバイパス狙い) |
%2e%2e/ や %2e/%2e/ |
パストラバーサルの変形構文 |
✅ まとめ:RESTパスでのSSPPテストのポイント
テクニック | 解説 |
---|---|
%2f..%2f を使ってパスを1階層上に移動 |
REST APIのアクセス制御をバイパス可能 |
結果のレスポンスや挙動を詳細に観察 | 成功・失敗の判定の鍵はレスポンスメッセージにある |
パストラバーサル構文を変化させて試行 | サーバーの正規化処理によって通る場合がある |
フロントからは渡せないリソースにアクセス可能になる | 管理者情報、非公開API、設定エンドポイントなど |
REST APIでは、「クエリパラメータだけでなくパス自体も攻撃対象になる」ことを意識しておくと、より深いテストが可能になります。特にパスがユーザー制御で変化するようなAPIは、常にこの種の攻撃に注意が必要です。
Best regards, (^^ゞ