$350 XSS in 15 minutes から学ぶ

ソース:

infosecwriteups.com

脆弱性XSS

 

訳:

特定のエンドポイントには、 Reflected XSS インジェクションに対して脆弱なname パラメータがあって。

 

example.com/profile?name=<img+src=1+onerror=alert(1337)>

 

バイパスの検索を開始し、Chrome デベロッパー ツールの検索機能を使用してこのエンドポイントを検索しました /profileすべての JS ファイルで別の脆弱なパラメータを確認しましたが、別のエンドポイントが見つかりました。 

 

example.com/services

 

私の頭に浮かんだ最初のアイデアは、この URL を Google 検索エンジンに入力し、このエンドポイントが params を使用して Google Web スペースのどこかにキャッシュされているかどうかを確認することでした。

最初の試行後、結果の最初のページで params を含むキャッシュされたエンドポイントが見つかりました。
このエンドポイントには ID param とその他のいくつかの params が含まれてて。

 

example.com/services?id=123&page=Demo

 

ペイロードを追加しました qwe'"<X</ID パラメータを追加し、Web ページのソース コードのどこかに何かが反映されているかどうかのチェックを開始しました。 

 

example.com/services?id=123qwe'"<X</

 

それに加えて、Chrome デベロッパー ツールの [ネットワーク] タブを開いて、このエンドポイントがどこかに送信する可能性のあるすべてのリクエストを確認しました。

ページを 2 回更新した後、エンドポイント自体の ID パラメーターとともに JSONP コールバック パラメーターを使用する興味深い AJAX リクエストを見つけました。
AJAX リクエスト URL は次のようなものでした。

 

lib.com/find?id=123qwe&jsonp=cb12

 

私が最初にテストしたのは、JSONP パラメータ自体を、次のパラメータに変更できるかどうかを確認することでした。 alertカスタムパラメータを使用した関数

驚いたことに、JSONP 値のチェックがなかったので、簡単に次のように変更しました。 alert(1337);

次に、ID パラメーターをもう一度チェックして、他の記号を受け入れるかどうかを確認します。
%AJAX URL にカスタム パラメータを追加するために、エンコードされたペイロードを作成するために署名します。

エンドポイント URL を次のように変更しました。

 

example.com/services?id=1%26jsonp=alert(1337);%23

 

JSで処理すると変形しました %26に&そして %23に #。
# (ハッシュタグ) 記号の後ろにあるものはすべて、ブラウザーによって無視されます。 最終的な AJAX 呼び出しは次のようになります。 

 

lib.com/find?id=1&jsonp=alert(1337);#&jsonp=cb12

 

この AJAX URL 操作 (パラメータ汚染攻撃) を使用して、1337 テキスト付きのアラート ボックスをトリガーすることに成功しました。
これにより、DOM XSS 脆弱性の存在が確認され、私は 350 ドルの報奨金を受け取りました。
さらに、古いレポートの再テストには 50 ドルが追加されます。 

 

ほなほな。