ブラウザからのリクエストをOWASP ZAPで保留し、編集してからWebサーバに送信する方法

OWASP ZAP

前回の記事(Webアプリ脆弱性調査のためのプロキシツール選定)で、OWASP ZAPを取り上げました。今回はこのツールを使って実際にブラウザから受け取ったリクエストを一旦保留し、編集してからWebサーバに送信する手順を説明します。

方法は2つあります。保留の対象とするURLを事前に登録しておく方法と、全てのリクエスト(もしくはレスポンス)を保留する方法です。まず前者を取り上げ、補足の中で後者に触れます。

昨年12月に、IPAテクニカルウォッチ 「ウェブサイトにおける脆弱性検査手法の紹介」の公開:IPA 独立行政法人 情報処理推進機構という記事がありました。この中で今回取り上げる機能をOWASP ZAPが持っていることは記述されているのですが、その方法についての説明はありませんでしたので本記事が参考になると思います。

環境

  • 例としてアルクのウェブサイトの英単語検索機能を使用する。
  • OS: Mac OS X v10.9.1
  • ブラウザ: Firefox v27.0
  • OWASP ZAP v2.2.2

手順1:OWASP ZAPを起動する

ZAPを起動

手順2:OWASP ZAP上でルートCA証明書を生成する

既に作成している場合、この手順は必要ありません。
1. トップレベルツールバーにある[オプション]アイコンをクリックする。
2. 左のメニューから[ダイナミック SSL証明書]を選択する。ダイナミック SSL証明書
3. [生成]ボタンをクリックして、ルートCA証明書を生成する。
4. [保存]ボタンをクリックし、生成したルートCA証明書ファイルを任意のパスに保存する。

手順3:OWASP ZAPのプロキシ設定を確認する

  1. トップレベルツールバーにある[オプション]アイコンをクリックする。
  2. 左のメニューから[ローカル・プロキシ]を選択する。ZAP ローカル・プロキシ
  3. ポート番号を確認する。

手順4:Firefoxを起動してプロキシ設定を行う

  1. [Firefox]メニュー -> [Preferences…] を選択する。
  2. [Advanced] -> [Network]タブ -> [Connection] -> [Settings…]ボタンをクリックする。Firefoxのプロキシ設定
  3. [Manual proxy configuration] を選択し、[HTTP Proxy]欄に “localhost”、[Port]欄に先ほど確認したポート番号を入力して、[Use this proxy server for all protocols]にチェックを入れる。Firefoxのプロキシ設定2
  4. [OK]ボタンをクリックする。

手順5:FirefoxにルートCA証明書をインポートする

  1. [Firefox]メニュー -> [Preferences…] を選択する。
  2. [Advanced] -> [Certificates]タブをクリックする。
  3. [Verify Certificates]ボタンをクリックする。FirefoxにルートCA証明書をインポート
  4. [Certificate Manager]ポップアップウィンドウが表示されたら[Authorities] をクリックする。FirefoxにルートCA証明書をインポート2
  5. [Import…]ボタンをクリックし、手順2でエクスポートしたルートCA証明書を選択する。
  6. 次のポップアップウィンドウが表示されるので、”Trust this CA to identify websites.”を選択して [OK]ボタンをクリックする。FirefoxにルートCA証明書をインポート3

手順6:Firefoxで目的のサイトにアクセスしてブレークポイントを追加する

  1. 目的のWebページにアクセスする。今回の場合、アルクのウェブサイトで”curling”を検索する。curlingを検索
  2. ZAPの画面左 [サイト]タブに送信したリクエストが記録されているはずなので、その行を右クリックして、[ブレーク…]を選択する。ブレークポイントを設定
  3. [ブレークポイント追加]ポップアップウィンドウが開くので、[保存]ボタンをクリックする。ブレークポイントを設定2
  4. 画面下 [ブレーク]タブの中に作成したブレークポイントが表示される。ブレークポイントを設定3

手順7:再度Firefoxで目的のサイトにアクセスし、リクエストを編集して送信する

  1. もう一度、目的のWebページにアクセスする。今回の場合、再度アルクで”curling”を検索する。
  2. するとこのHTTPリクエストはZAPで保留状態になる。ZAP 画面上部では [ブレーク]タブが開いた状態になっている。リクエストを保留
  3. リクエストの内容を編集する。今回は”curling”になっていたパラメータ値を”snowboarding”に変更する。リクエストを編集
  4. ZAP 画面上部の [サブミットして次のリクエストかレスポンスへ移動]アイコンをクリックする。場合によっては、JavaScriptやCSSのリクエストが続くので、リクエストがなくなるまで [サブミットして次のリクエストかレスポンスへ移動] アイコンをクリックする。もしくは[サブミットして次のブレークポイントへ移動]アイコンをクリックしてもよい。
  5. ブラウザを表示すると検索が完了している。ブラウザの状態

補足

  • SSLに関する設定(手順2、5)は必要なければ行わなくてもよいのですが、いずれ必要になることも多いだろうと思いますので早い段階でやっておいた方が無難です。
  • 上記のように、保留対象URLをブレークポイントとして事前に登録するのではなく、全てのリクエスト(もしくはレスポンス)を保留対象とする場合は、下図のように画面上部にある[全リクエストにブレークポイントセット]アイコン(もしくは[全レスポンスにブレークポイントセット]アイコン)をクリックします。するとブラウザで任意のURLにリクエストするとZAPで保留されます。詳しくはこちら Break Points を参照して下さい。
    ブレークポイントのアイコン
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*