ソース:
訳:
私が見つけた実際のケース
さて、私が見つけた実際のケースに移りましょう 。
プログラムは非公開ですので、内容の一部を自主的に変更させていただ。
で調査を行ったところ、 www.example.com )が見つかりました いくつかの脆弱性 ( XSS、Iframe インジェクションなど と思われる ユーザー入力が必ずしも正しくサニタイズされていないのではないか 。
を実行できるかどうかを確認することを考えました。
HTML / JS コードのインジェクションに直接つながる可能性のあるさまざまなベクトルを検討した後、 URL 経由で汚染プロトタイプ 可能であれば、ポリシー (フィルターについては非常に緩い) が適用されます。
必ず何か面白いことをやらせてください。
基本的なことから始めましたが、 WAF によってブロックされ 。
?__proto__.zhero=zhero
ました 何度か試み 介しては成功しませんでした が、特にコンストラクターを が、ファイアウォールが 私のリクエストを体系的にブロックしました 。
それでも、試してみる価値はあって。
?__pro__proto__to__.zhero=zhero
コンストラクター経由 ( オブジェクトなのでプロトタイプも継承します ):
constructor[prototype][zhero]=zhero
をそれぞれのケースで必ずテストしてください オブジェクトにアクセスする 2 つの方法 ( ドット表記 と 括弧表記 ) 。
これは、URL とそのパラメータがどのように 処理される かに応じて、WAF をバイパスした後に特に違いが生じる可能性があります。
でターゲットを調査しているときに その後、 Web アーカイブ 含まれていることに気付きました 、多くの URL に# 文字の後に有用な情報が 。 これは、それが 単なるアンカーではない ことを示しており、アプリケーションがこの文字を使用する場合は、 URL とそのパラメータを管理する関数によって確実に考慮される必要があります 。
だから私は試していました:
#__proto__[zhero]=zhero
リクエストは、WAF に問題なく、プロトタイプが汚染されているかどうかを確認するためのコンソールでの小さなテストに合格しました。
良い結果が得られましたが、 プロトタイプは汚染されました 。
JS コードを少し調べた結果、責任のある関数は次のとおりです。
ご覧のとおり、 フィルターは まったく設定されていません。
入力は関数に渡される前にフィルターを通過することもできましたが、ここではそうではありませんでした 。
前に説明したように、 に十分ではありません これだけではレシピ を成功させるの 。
必要があります アプリケーションによって危険に使用されるプロパティにペイロードを挿入する 。
ソース コードを見ると、URL 経由で以前に挿入されたキーと値のペアが、 スタイル タグの「属性値」として使用されています 。
これを見た後は、悪用方法に謎はなく、 イベント ハンドラーを属性として使用し、JS コードを値として使用するだけです 。
#__proto__[onload]=alert(%22XSS by zhero_%22)
ことができました 汚染プロトタイプを XSS にチェーンする 。
もちろん、より複雑な JS コードを挿入することも可能です。
ネイティブ アラート機能は、通常どおり、例としてのみ使用されて。
アプリケーション 全体が脆弱であった でもこのペイロードを使用することが可能でした 部分 のどの ため、 www.example.com 。
ほなほな。