Shikata Ga Nai

Private? There is no such things.

有効なパラメータの注入 – `%26` を使って内部APIに追加リクエストを仕込む

Hello there, ('ω')ノ

🎯 目的

ユーザーが本来制御できない内部パラメータ(例:email など)を、エンコードした &%26)を使ってリクエスト中に追加することで、サーバー側のAPIリクエストに余分なデータを差し込む。


📥 攻撃リクエスト例

GET /userSearch?name=peter%26email=foo&back=/home

→ サーバー内部では次のように解釈される可能性:

GET /users/search?name=peter&email=foo&publicProfile=true

👉 email=foo が本来ユーザーに設定されるべきでないフィールドとしてサーバーに送られている!


🧪 注入する“有効な”パラメータを見つけるには?

  • GET /users/123 のようなレスポンスで出てくるフィールド名をチェック
    例: json { "id": 123, "name": "John Doe", "email": "john@example.com", "role": "user", "isAdmin": false }

✅ この場合の注入候補: - email - role - isAdmin - id


🧪 テスト手順

① 有効な値を追加

GET /userSearch?name=peter%26email=test@evil.com&back=/home

emailパラメータが内部APIのフィルターや照合に影響していないかを確認。

② 値を不正にして影響を試す

GET /userSearch?name=peter%26role=admin

role=admin によって 本来表示されない管理者アカウント が出てくるかもしれない。

③ 複数パラメータの連続注入

GET /userSearch?name=peter%26isAdmin=true%26email=admin@example.com

→ すべての値が連携して 挙動やレスポンスが変わるかを確認。


🔍 レスポンスの観察ポイント

挙動 解釈
エラーが発生しない パラメータがサーバーに受け入れられている可能性が高い
表示内容に変化がある パラメータが処理に影響している明確な証拠
想定外のユーザーが表示される フィルターバイパス成功の兆候
メールアドレスを使って直接ユーザー情報が表示される 内部APIの照合条件にヒットしている可能性あり

まとめ:有効パラメータ注入のポイント

テクニック 狙い
%26param=value を使って内部APIに有効なパラメータを追加 データ取得や挙動のバイパスを狙う
GETレスポンスで出てくるフィールド名を参考にする 注入対象のパラメータ候補を絞り込む
エラーが起きず、内容が変化する場合は成功の可能性 パラメータが影響している証拠

このようなSSPPの活用は、本来アクセスできない内部APIの機能を外部から操作するための強力な攻撃手法です。特に有効パラメータが見つかった場合、その影響範囲をしっかりテストしておきましょう。

Best regards, (^^ゞ