hacktricks/pentesting-web/parameter-pollution.md

8.7 KiB
Raw Blame History

パラメータ汚染

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

コピー元https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654

概要:

HTTPパラメータ汚染HPPは、特定の悪意のあるタスクを達成するために、ウェブアプリケーションのHTTPパラメータを汚染することを意味します。これは、ウェブサイトがHTTPリクエスト中に受け取ったパラメータの処理方法を操作することを指します。これにより、ウェブサイトの意図した動作が変更されます。HTTPパラメータ汚染は、単純な攻撃の一種ですが、効果的な攻撃です。

パラメータを汚染すると、コードはサーバーサイドでのみ実行され、私たちには見えませんが、結果は画面上で確認できます。その間のプロセスはブラックボックスです。

例えば、URL https://www.anybank.com/send には3つのパラメータがあります

  1. from
  2. to
  3. amount

URLhttps://www.anybank.com/send/?from=accountA&to=accountB&amount=10000

これは、accountAからaccountBへの10000のトランザクションを行う通常のURLですが、もしもう1つの同じパラメータ「from」を追加した場合はどうなるでしょうか。

したがって、URLは次のようになりますhttps://www.anybank.com/send/?from=accountA&to=accountB&amount=10000&from=accountC

このURLを処理すると、10000のトランザクションがaccountAではなくaccountCから差し引かれます。これがHTTPパラメータ汚染攻撃でパラメータを操作する方法です。この脆弱性の範囲は、GETリクエストに限定されるわけではありません。POSTベースのリクエストでもこの攻撃を実行することができます。パスワードの変更、2FA、コメント、プロフィール写真のアップロード、APIキーが渡されるパラメータ、OTPなど、多くの場所でこの脆弱性を試すことができます。

パラメータを操作すると、それぞれのウェブ技術がパラメータを解析する方法によって操作が異なります。ウェブ技術は「Wappalyzer」を使用して特定することができます。以下は、いくつかの技術とそのパラメータ解析のスクリーンショットです。技術とそのパラメータ解析

Image for post

私は、この脆弱性を見つけた1つの事例を共有したいと思います。この脆弱性を利用してアカウントを乗っ取ることができました。

どのようにしてこの脆弱性を見つけましたか?

  1. そのプログラムのログインページに移動し、ログインのためにOTPを要求されました。

OTPを送信

Image for post

  1. メールアドレスを入力し、「ワンタイムパスワードを送信」をクリックしました。

  2. Burp Suiteを使用してリクエストを傍受し、同じパラメータを使用して別のメールアドレスを追加しましたテスト目的で2つのメールアドレスを作成しました

Burpリクエスト

Image for post

  1. 別のアカウントradhika....@gmail.comにshrey....@gmail.comのOTPが届きました。

OTP

Image for post

  1. OTPをコピーして、そのプログラムのログイン画面でshrey....@gmail.comに移動し、このOTPを入力しました。すると、アカウントにログインできました。

アカウント乗っ取り

Image for post

ここで起こったことは、バックエンドアプリケーションが最初の「email」パラメータの値を使用してOTPを生成し、2番目の「email」パラメータの値を使用して値を提供したため、shrey....@gmail.comのOTPがradhika....@gmail.comに送信されたということです。

**注意:**4番目のステップの画像では、radhika....@gmail.comにOTPが届いたというメッセージが表示されたため、混乱しました。したがって、パラメータが汚染されておらず、OTPがradhika....@gmail.comのためのものだと思いましたが、shrey....@gmail.comでOTPを試したところ、機能しました。

Flask & PHP

この解説では、FlaskとPHPが実行されているApache HTTP Server上で、a=1&a=2というHTTPクエリがどのように解釈されるかが示されています。Flaskでは、パラメータは1最初の出現になりますが、PHPでは2(最後の出現)になります。

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥