ChromeとOWASP ZAPでWeb通信を改竄


* TDU CTF参加した時に使いましたので、メモります。
* ちなみにFireFoxであれば、以下のエントリを参考にすればok
	* [FoxyProxy、ええんやで(^^)　インストール＆設定](http://qiita.com/nilfigo/items/c8b5e8321e63531640a9)

# 何がしたいか
* ブラウザ <-> Webサーバ間のHTTP通信を補足し、
* その挙動をみて、自分の好みのパラメタやシグネチャを付加し、
* 改造したパケットを再送信し、それがどういった脆弱性につながるかを観察しようとしました。
* TDU CTFではcookie値を書き換えるために利用したという感じです。
* イメージでいうと、下記のローカルProxyにOWASP ZAPを利用して、上記を実現しようとしました。


![](http://image.slidesharecdn.com/random-140914032713-phpapp02/95/-10-638.jpg?cb=1410665593)

* 参照: http://www.slideshare.net/zaki4649/ss-39061128

# OWASP ZAPの設定その1: Proxyの設定
* OWASP ZAPのpreferenceから"local proxy"メニューを選択します
* local上で動くので、Addressはlocalhostを選択します
* Portは利用されていないポート番号を指定しましょう。
	* 1024以上なら大体何でもいいのではないでしょうか。
* ブラウザのproxyの向け先を上記にすると、OWASP ZAPが通信の内容をキャプチャします

![](https://i.gyazo.com/12ef1b18641b7182220fc33957e37171.png)

# Chrome側のProxy設定
## Proxy SwitchyOmegaのインストール　
* Chromeの設定 > 詳細設定 > ネットワーク"プロキシ設定の変更"からプロキシを設定できますが、これをしてしまうと全通信に適用されてしまいます。
* そうなると、OWASP ZAP上のノイズが多くなってしまうので、こちらはやめます。かわりにProxy SwitchyOmegaという拡張機能を使いますので、インストールしてください

## Proxy SwitchyOmegaの設定
* ツールバー上に黒いドーナツ上のアイコンがでるので、それをクリックして"Options"ボタンを押します。そうすると設定画面が開きます。

![スクリーンショット 2015-09-01 1.23.10.png](https://qiita-image-store.s3.amazonaws.com/0/59166/4b1b5be5-897c-0911-2c6f-df860f7377fe.png "スクリーンショット 2015-09-01 1.23.10.png")

### Profiles: Proxyの設定
* 先ほどOWASP ZAPで設定した内容を、Server欄とPort欄に設定します。これでブラウザはOWASP ZAPをプロキシとして、通信を中継させようとします
* 左下の"Apply Changes"ボタンで設定を保存します

![](https://i.gyazo.com/2e1945e76d36244aea2a0aff7e071d4d.png)

### Profiles: auto switchの設定
* ここに特定のホスト宛通信をプロキシに向ける、という個別設定ができます。
* 今回は特定ホスト配下の全ページを対象にしたいので、ワイルドカードで指定します。
* 又、ActionにはProxyを指定します。
* 保存を忘れないようにしましょう。

![スクリーンショット 2015-09-01 1.37.22.png](https://qiita-image-store.s3.amazonaws.com/0/59166/9e5a9277-7d6a-3a3e-03d9-da2d6525e0a3.png "スクリーンショット 2015-09-01 1.37.22.png")

* 尚、条件は複数設定可能ですが、上から順に適用されることを認識ください

### Chrome上で設定したプロファイルを有効化する
* ツールバー上のアイコンを押下し、"auto switch"を選択します。
* これで先ほど設定したProfileがChrome上を流れる通信に適用されます。
* これでChrome側の設定は終了です

![スクリーンショット 2015-09-01 1.40.36.png](https://qiita-image-store.s3.amazonaws.com/0/59166/9de5fd22-b595-67a5-3750-0a9864553a43.png "スクリーンショット 2015-09-01 1.40.36.png")


# 通信をキャプチャする
* さきほどProxy SwitchyOmegaに設定したホストへブラウザからアクセスします。
* そうすると、OWASP ZAP上でそのパケット情報がキャプチャします。
* この時点では、OWASP ZAPは透過的なプロキシとして動作しているので、特に干渉はしていません。

![スクリーンショット 2015-09-01 1.45.01.png](https://qiita-image-store.s3.amazonaws.com/0/59166/ebb25e64-d749-d0a2-1634-697e677be824.png "スクリーンショット 2015-09-01 1.45.01.png")

# OWASP ZAPの設定その2: ブレークポイントの設定
* 今回のゴールは改竄したパラメタを送ることにあります。
* そのために、キャプチャされた通信と同じものが発生した場合、それを一旦OWASP ZAP内で止める必要があります。それを実現するための機能が、ブレークポイントです
* キャプチャされたパケット上で右クリックし、"Break..."アイテムを押下します
* これを設定すると、同サイトへの通信をOWASP ZAP上が保留し、改竄できるようになります。

![スクリーンショット 2015-09-01 1.47.42.png](https://qiita-image-store.s3.amazonaws.com/0/59166/ca1d3699-4984-04e1-71b4-ec6d601f24fb.png "スクリーンショット 2015-09-01 1.47.42.png")

* 設定が済んだら、再度ブラウザから同サイトへアクセスしてみましょう。下記の図のように通信が止められる筈です。
	* 上のほうにあるタブの中の"Break"タブが押下されている状態であれば成功

# OWASP ZAPで通信改竄
* この状態で右側のペイン内にあるものを編集できます。何かしらのパラメタを改竄してみましょう。
	* 例: Cookieヘッダ値の変更

![スクリーンショット 2015-09-01 1.54.12.png](https://qiita-image-store.s3.amazonaws.com/0/59166/53310556-700b-e0de-6483-04e5939467f3.png "スクリーンショット 2015-09-01 1.54.12.png")


* パラメタ改竄がおわったら、図の上部にある再生ボタンを押します。そうすると改竄されたパケットが対象のサイトへ送信され、レスポンスを受信することができます
* パラメタ改竄の影響は、レスポンスペインタブで確認しましょう。

![スクリーンショット 2015-09-01 2.06.36.png](https://qiita-image-store.s3.amazonaws.com/0/59166/44afbaf8-0b5e-1e2a-d0f8-b570357eeac6.png "スクリーンショット 2015-09-01 2.06.36.png")