XSS脆弱性は、HTTPリクエスト内の入力をユーザが制御可能で、安全でない方法で結果のレスポンスに"反射"される場合に発生する可能性があります。Burp Repeaterを使うと、クライアント側のコントロールに邪魔されずにHTTPリクエストを直接操作でき、反射された入力がサーバ側で適切にサニタイズやフィルタリングされているかどうかを簡単にテストできます。
このチュートリアルでは、次の手法を学びます:
Burpブラウザを使って、次のラボにアクセスします:
https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded
意図的に脆弱性を作り込んだブログサイトで、識別しやすい任意の文字列を検索バーを使って検索します。これは一般に"カナリア"と呼ばれています。
見た通り、結果ページには入力した検索語が表示されています。Burp Repeaterを使い、この反射された入力がサーバで適切にサニタイズされているかどうかをテストしてみましょう。
Burpブラウザを使用しているため、対象サイトとのHTTP通信の履歴をProxy > HTTP履歴タブで確認できます。
検索クエリを送信した、GET /?search=CANARY
リクエストを探します。これをBurp Repeaterに送信します。
Repeaterタブに移動すると、番号のついたタブでリクエストを確認できます。
送信ボタンをクリックすると、リクエストが再送されます。サーバからのレスポンス結果は、レスポンスパネルに表示されます。
レスポンスパネルの下部にある検索バーで、レスポンス内でカナリア文字列が出現しているかどうかを検索します。
レスポンスで、自分の入力が反射された周囲の文脈を調査します。これは、攻撃を成立させるために使用できる潜在的なXSS手法に影響します。今回は、入力した内容がHTML<h1>
要素に反射していることがわかります。
このリクエスト内で、search
パラメータ値の先頭に、<script>
タグを追加します。これで、<
と>
の文字、あるいはタグ全体がサーバによって適切にフィルタリングやサニタイズされるかどうかをテストします。
レスポンスパネルの左下で歯車のアイコンをクリックし、テキスト変更時にマッチした箇所に自動スクロールオプションを選択します。
リクエストを送信し、自動的にカナリア文字列が反射されている行までパネルがスクロールすることを確認します。<script>
タグが除去やエスケープなどがまったくされていない点に注目してください。
Repeaterパネル上部にある<と>ボタンを使用すると、リクエスト間を行き来できます。特に、自動スクロールオプションと組み合わせると便利です。
リクエスト内で、searchパラメータの値を<script>alert(1)</script>CANARY
のような完全なXSS概念実証攻撃に変更し、リクエストを送信します。
ブラウザで、ラボを突破したことがわかります。ペイロードの実行を確認したい場合は、Burp Repeaterのリクエスト上で右クリックし、レスポンスをブラウザで表示を選択してください。このURLをコピーしてブラウザでアクセスし、alert()
関数が正常に呼び出されるか確認してください。
おめでとうございます。Burp Repeaterを使って基本的な反射型XSS脆弱性をテストし確認する方法を学びました。また、さまざまな入力がサーバでどのように処理されるかをテストする際に、Burp Repeaterの検索機能と自動スクロール機能を使用して、ワークフローを高速化する方法を学びました。
さらに読みたい場合は、Webセキュリティアカデミーの題目を確認してください: