Burpプロキシでシナリオをテストしています。
私はWebサイトにいます_https://website.com/web
_
アイテムを削除するオプションがあります。クリックすると、特定のPOSTリクエストが送信されます(XMLHttpRequest
、ページの更新は行われません)。ここで_<script>
_タグ:
_POST /web/deleteItem HTTP/1.1
Host: website.com
returnParameter=<script>alert('xss')</script>
_
deleteItem
メソッドは以下を返します。
_HTTP/1.1 200 OK
Date: Tue, 31 Jan 2017 22:18:54 GMT
X-XSS-Protection: 1; mode=block
Content-Type: application/json;charset=UTF-8
...
{"status":"SUCCESS","result":"<script>alert('xss')</script>"}
_
ステップ1のWebサイトには、JSONを解析して画面に結果値を表示するJavaScript関数があります
alert
は_https://website.com/web
_に表示されているため、反映されたXSSは正常に実行されました。
しかし、ユーザーをWebサイトに誘導してXSSを実行する必要があるため、このシナリオは現実的ではありません。
簡単なHTML POSTフォームを作成し、パラメータを_https://website.com/web/deleteItem
_に送信することでこれを試しました。フィッシングを使用し、ユーザーがフォームを送信するとします。
アクションは実際に実行されましたが、[〜#〜] json [〜#〜]応答しか受け取りませんでした。ステップ#1のページがなかったため、alert('XSS')
を実行する必要がある_https://website.com/web
_にユーザーがいないため、実際にはXSSとして何も表示されませんでした。ユーザーをページ#1に送信して、このJSONをXSSで何らかの方法で送信できるかどうかはわかりません。
このシナリオを現実的な条件で実行する方法はありますか?
提案された反射型XSSの脆弱性は、次のコンテンツタイプにより、最新のブラウザでは完全かつ完全に悪用されることはありません。
Content-Type: application/json;charset=UTF-8
Content-typeはHTMLである必要があります。そうでない場合は、不足しているcontent typeでうまくいきます。 content-type application/jsonまたはplain/textを使用することは、どちらもXSSに対する強力な緩和策です。
コンテンツスニッフィング は、コンテンツタイプが定義されていても、古いブラウザでJavaScriptを実行するために使用できます。攻撃者として、ターゲットブラウザーがまだコンテンツスニッフィングを使用している場合、ブラウザーはドライブバイリモートコード実行などのより深刻なバグに対しても脆弱です。
@Jeroenが指摘したように、これは安全でない入力検証問題であり、反射型XSSに対して脆弱ではないかもしれませんが、2次コードインジェクションや永続的なXSSなどの他の問題を引き起こす可能性があります。