Shikata Ga Nai

Private? There is no such things.

既存パラメータの上書き – Server-side Parameter Pollutionで操作対象を奪うテクニック

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