Client Side Prototype Pollution
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
ツール https://github.com/dwisiswant0/ppfuzz、 https://github.com/kleiton0x00/ppmap および https://github.com/kosmosec/proto-find は、プロトタイプ汚染の脆弱性を見つけるために使用できます。
さらに、ブラウザ拡張機能 PPScan を使用して、アクセスするページを自動的に スキャンし、プロトタイプ汚染の脆弱性を探すこともできます。
プロトタイプ汚染の脆弱性がツールによって特定され、コードがそれほど複雑でない場合、Chrome Developer Toolsでlocation.hash
、decodeURIComponent
、またはlocation.search
などのキーワードを検索することで脆弱性を見つけることができます。このアプローチにより、JavaScriptコードの脆弱なセクションを特定できます。
より大きく、より複雑なコードベースの場合、脆弱なコードを発見するための簡単な方法は、以下の手順を含みます:
ツールを使用して脆弱性を特定し、コンストラクタ内のプロパティを設定するために設計されたペイロードを取得します。ppmapによって提供される例は次のようになります:constructor[prototype][ppmap]=reserved
。
ページで実行される最初のJavaScriptコードの行にブレークポイントを設定します。ペイロードでページをリフレッシュし、このブレークポイントで実行を一時停止します。
JavaScriptの実行が一時停止している間に、JSコンソールで次のスクリプトを実行します。このスクリプトは、'ppmap'プロパティが作成されたときに信号を送信し、その起源を特定するのに役立ちます:
Sources タブに戻り、「スクリプトの実行を再開」を選択します。JavaScript は引き続き実行され、'ppmap' プロパティは予想通りに汚染されます。提供されたスニペットを利用することで、'ppmap' プロパティが汚染される正確な場所を特定できます。Call Stack を調べることで、汚染が発生した異なるスタックを観察できます。
どのスタックを調査するかを決定する際には、JavaScript ライブラリファイルに関連するスタックをターゲットにすることがしばしば有用です。プロトタイプ汚染はこれらのライブラリ内で頻繁に発生します。ライブラリファイルへの関連付けを調べて、関連するスタックを特定します(右側に表示され、ガイダンス用の画像に似ています)。行 4 と 6 のように複数のスタックがある場合、論理的な選択は行 4 のスタックです。これは汚染の最初の発生を示し、脆弱性の根本原因を表します。スタックをクリックすると、脆弱なコードに移動します。
ガジェットは、PP 脆弱性が発見されたときに悪用されるコードです。
アプリケーションがシンプルな場合、srcdoc/innerHTML/iframe/createElement
のような キーワード を 検索 し、ソースコードをレビューして JavaScript 実行につながるか を確認できます。時には、言及された技術がガジェットを全く見つけられないこともあります。その場合、純粋なソースコードレビューが、以下の例のような素晴らしいガジェットを明らかにします。
この書き込みを確認してください: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
この研究 は、いくつかの HTML サニタイザーライブラリによって提供される サニタイズをバイパスするために使用する PP ガジェット を示しています:
sanitize-html
dompurify
Closure
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)