Hello there, ('ω')ノ
🎯 目的
本来クエリに含まれているパラメータ(例:name=peter
)を、再び同じパラメータ名(name=carlos
)で注入して“上書き”を試みる。
🧪 攻撃リクエスト例
GET /userSearch?name=peter%26name=carlos&back=/home
→ サーバー内部の処理で以下のように変換される可能性:
GET /users/search?name=peter&name=carlos&publicProfile=true
🧠 技術ごとのパラメータ処理の違い
技術スタック | 処理方法 | 結果 |
---|---|---|
PHP | 最後の値を使用 | name=carlos → carlosの検索になる |
ASP.NET | 両方をカンマで結合 | name=peter,carlos → 無効な名前としてエラーになる可能性 |
Node.js / Express | 最初の値を使用 | name=peter → 元と同じ検索結果になる |
👉 同じパラメータ名が複数あるとどう処理されるか?が鍵!
🔍 結果の観察ポイント
結果 | 解釈 |
---|---|
carlos が表示された |
name=carlos に上書き成功!(SSPP成立) |
Invalid username のエラー |
name=peter,carlos など、パラメータが結合された証拠 |
peter がそのまま表示された |
最初の値が使われた → Node.js系? |
🧪 応用:管理者ユーザーへのなりすまし
GET /userSearch?name=user%26name=administrator&back=/home
→ PHPのような環境でname=administrator
が有効化されれば、管理者ユーザーでログイン、情報閲覧、操作が可能になる。
🧠 攻撃パターンをさらに広げる方法
パターン | 内容 |
---|---|
%26param=value を複数回使う |
上書き+追加のパラメータ混在をテスト |
param=%26param=value |
パラメータのネスト構造をテスト(例:JSONやオブジェクト内) |
param=%2526other=value |
URLダブルエンコードでWAFバイパスを狙う |
✅ まとめ:パラメータ上書きテストのポイント
チェック項目 | 内容 |
---|---|
同一パラメータ名を2回使う | %26name=carlos のように注入する |
技術スタックに応じて結果が変わる | PHPは最後、Expressは最初、ASP.NETは両方使用など |
結果が変われば脆弱性の兆候 | 上書き or 結合に成功すればSSPP成立 |
管理者ユーザーなどを試してみる | 不正アクセスの足がかりに使える可能性大 |
この攻撃手法は、単純ながら非常に効果的です。“同じ名前のパラメータがもう1つあったらどうなるか?”という視点で、APIやサーバー側の動作を観察すると、思わぬ脆弱性が浮かび上がるかもしれません。
Best regards, (^^ゞ