Burp Repeaterによる反射型XSSのテスト

XSS脆弱性は、HTTPリクエスト内の入力をユーザが制御可能で、安全でない方法で結果のレスポンスに"反射"される場合に発生する可能性があります。Burp Repeaterを使うと、クライアント側のコントロールに邪魔されずにHTTPリクエストを直接操作でき、反射された入力がサーバ側で適切にサニタイズやフィルタリングされているかどうかを簡単にテストできます。

このチュートリアルでは、次の手法を学びます:

ステップ1: 興味深いリクエストを探す

Burpブラウザを使って、次のラボにアクセスします:

https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded

意図的に脆弱性を作り込んだブログサイトで、識別しやすい任意の文字列を検索バーを使って検索します。これは一般に"カナリア"と呼ばれています。

対象サイトを任意の文字列で検索する

見た通り、結果ページには入力した検索語が表示されています。Burp Repeaterを使い、この反射された入力がサーバで適切にサニタイズされているかどうかをテストしてみましょう。

ステップ2: Burp Repeaterにリクエストを送信する

Burpブラウザを使用しているため、対象サイトとのHTTP通信の履歴をProxy > HTTP履歴タブで確認できます。

検索クエリを送信した、GET /?search=CANARYリクエストを探します。これをBurp Repeaterに送信します。

ステップ3: 入力が反射されたレスポンスを検索する

Repeaterタブに移動すると、番号のついたタブでリクエストを確認できます。

Repeaterに送信されたリクエスト

送信ボタンをクリックすると、リクエストが再送されます。サーバからのレスポンス結果は、レスポンスパネルに表示されます。

レスポンスパネルの下部にある検索バーで、レスポンス内でカナリア文字列が出現しているかどうかを検索します。

Burp Repeaterで検索機能を使用

ステップ4: 挿入された文脈を特定する

レスポンスで、自分の入力が反射された周囲の文脈を調査します。これは、攻撃を成立させるために使用できる潜在的なXSS手法に影響します。今回は、入力した内容がHTML<h1>要素に反射していることがわかります。

ステップ5: 入力のサニタイズ不備をテストする

このリクエスト内で、searchパラメータ値の先頭に、<script>タグを追加します。これで、<>の文字、あるいはタグ全体がサーバによって適切にフィルタリングやサニタイズされるかどうかをテストします。

レスポンスパネルの左下で歯車のアイコンをクリックし、テキスト変更時にマッチした箇所に自動スクロールオプションを選択します。

リクエストを送信し、自動的にカナリア文字列が反射されている行までパネルがスクロールすることを確認します。<script>タグが除去やエスケープなどがまったくされていない点に注目してください。

ヒント

Repeaterパネル上部にある<>ボタンを使用すると、リクエスト間を行き来できます。特に、自動スクロールオプションと組み合わせると便利です。

Burp Repeaterタブの戻ると進むボタン

ステップ6: XSSの概念実証を送信する

リクエスト内で、searchパラメータの値を<script>alert(1)</script>CANARYのような完全なXSS概念実証攻撃に変更し、リクエストを送信します。

ブラウザで、ラボを突破したことがわかります。ペイロードの実行を確認したい場合は、Burp Repeaterのリクエスト上で右クリックし、レスポンスをブラウザで表示を選択してください。このURLをコピーしてブラウザでアクセスし、alert()関数が正常に呼び出されるか確認してください。

Webブラウザで概念実証を観察し、スクリプトの実行を確認

概要

おめでとうございます。Burp Repeaterを使って基本的な反射型XSS脆弱性をテストし確認する方法を学びました。また、さまざまな入力がサーバでどのように処理されるかをテストする際に、Burp Repeaterの検索機能と自動スクロール機能を使用して、ワークフローを高速化する方法を学びました。

続きを読む

さらに読みたい場合は、Webセキュリティアカデミーの題目を確認してください: