15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OPENLOGIAdvent Calendar 2017

Day 9

Burp SuiteでWebアプリのQAをする

Last updated at Posted at 2017-12-08

OPENLOGIの大島です:innocent:
OPENLOGI Advent Calendar 2017の9日目の記事です。

弊社のサービス開発では品質をより向上させるため、日々QA(Quality Assurance)が行われています。ただQAとかテストって結構めんどくさかったり難しかったりして完全に実施するのは難しいものです:thinking:

その1つにフロント側でバリデーション(入力チェック)がかかっている部分は通常の操作ではサーバ側の挙動を確認できないというのがあります。

今回はその解決策として、Burp Suiteというツールを用いたサーバ側の処理のQA方法を紹介します。

Burp Suiteとは

ローカルプロキシツールです。HTTPリクエストやレスポンスを中継して、中身を確認したり自由にいじれたりできます。普通はWeb脆弱性診断などに使われるんですが、今回はもっと広い意味での動作確認に使ってみます。

一応注意事項

改変リクエストは攻撃として扱われるため、許可なく他人のサイトに送信すると不正アクセス禁止法にひっかかります。おやめください:pray: また自分が管理するサイトでもAWSなど外部サーバーに対して実施する場合はあらかじめ申請が必要です。
というわけで、基本的には自身のローカル開発環境に対して実施するようにしましょう。

導入

ここからBurp Suiteをダウンロード&インストールします。
https://portswigger.net/burp

開くとProject設定とか聞かれますが、TemporaryでOKです。

設定

ブラウザとサーバ間に挟むようにプロキシを設定します。ブラウザ⇔BurpBurp⇔サーバ の2つの設定をします。

ブラウザ⇔Burp

  • 上部のProxyタブ→Optionsタブ→Proxy Listeners
    ここでBurpが待ち受けするIP/ポートを指定します。
    Burp Suite Free Edition v1.7.23 - Temporary Project-2.jpg

今回は127.0.0.1:8888を指定します。これがBurpが待受しているIP/Port番号になります。

Edit proxy listener.jpg

ブラウザ側でプロキシ設定をします。Firefoxだと about:preferences#generalにアクセスしてネットワークプロキシタブです。
ここにBurpのListenerの値を指定します。
設定-2.jpg

Burp⇔サーバ

スコープの設定をします。スコープで指定した対象のみにリクエストが送信されます。これをしないと予期しないところへリクエストを送ってしまうかもしれないので、設定しておきましょう。

Burp Suite Free Edition v1.7.23 - Temporary Project-3.jpg

基本の使い方

Proxyタブ→Interceptタブを見ると以下のように表示されています。
Burp Suite Free Edition v1.7.23 - Temporary Project-5.jpg

  • 図の状態は、ブラウザが送ろうとしているリクエストをBurpが中断している状態です。ブラウザ上では通信中になっています。ボタンの機能は下記の通りです
    • Forward : このリクエストを送信します
    • Drop : このリクエストを削除します
    • Intercept is on : リクエストを中断している状態を示しています。ボタンを押すとoffになり、溜まっている全てのリクエストが送信されます
    • Action : このリクエストを他のタブ(機能)へコピーして使えるようにします
  • リクエストの中身が見えていますが、書き換えて送信ができます

通常はIntercept をOffにしてブラウザを操作し、確認したいリクエストを送る直前でOnにします
Burp_Suite_Free_Edition_v1_7_23_-_Temporary_Project.jpg

例えば入力フォームで日時指定する項目があったとして、ここで書き換えて送信することで、本来はフロントの入力チェックで制限がかかっているような値でも自由に書き換えることができます。サーバ側で正しくエラーとして処理してくれることが確認できればOKです。

応用編

いちいちこんなことするのめんどくせえ!と思われたかもしれません。僕もそう思います:pray:
Burpには繰り返しテストしたいときに便利な機能があります。今回はRepeaterIntruderを紹介します。

HTTP History

その前にHTTP Historyについて紹介です。リクエストとレスポンスの履歴が全部確認できます。
数が多いので目的のものを探すのが大変なのですが、例えばParamsカラムにチェックがあるものはパラメーターがあるリクエストを示していたり、Editedは改変したものを示していたりするので、うまく見つけましょう。

Burp_Suite_Free_Edition_v1_7_23_-_Temporary_Project.jpg

適当な行で右クリックすると、そのリクエストに対してアクションができます。今回はさっきのPOSTリクエストをRepeaterの機能で使用できるように、Send to Repeaterで送っておきます。

スクリーンショット_2017-12-08_3_05_36.jpg

Repeater

指定したリクエストを繰り返し送信できる機能です。Goを押すたびに左に書いてあるリクエストが送信されます。
先程のSend To Repeater により指定したリクエストが左側に表示されているかと思いますが、ここからちょっとずつ値を書き換えながら繰り返し送信してみることができます。ちなみにレスポンスは右側に表示されるだけで、ブラウザには反映されません。

Burp_Suite_Free_Edition_v1_7_23_-_Temporary_Project.jpg

Intruder

リクエストの複数のパラメータを複数の好きな内容に改変して、それぞれリクエストを送ってくれるすごいやつです。

Positionsタブ

§で囲まれている、色付けされた部分が指定した値に改変されます。改変される場所は自由に設定可能です。
Burp_Suite_Free_Edition_v1_7_23_-_Temporary_Project.jpg

Payloadsタブ

Payload Optionsで指定した値が代入されます。
下記の設定では指定した値を1つ1つのパラメータに順番に代入してリクエストを送ってくれます。
Burp_Suite_Free_Edition_v1_7_23_-_Temporary_Project.jpg

右上のStart attackを押すとリクエストの送信が始まり、以下のように結果を一覧で確認できます。

Intruder_attack_2.jpg

このへんはだいぶセキュリティテストめいてきますが使いたくなる場面もあるかも・・ないかもしれません。

まとめ

ローカルプロキシツールBurp Suiteで動作確認を行う方法を紹介しました。Webセキュリティ関連で使われることが多い本ツールですが、うまく使えば開発者の動作確認の手段としても有効です。みなさんも良かったら使ってみてください:pray:

15
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?