セキュリティあれこれ

セキュリティ関連のメモ

burp マクロ機能の使い方(1)

Web アプリ診断でセッションハンドリングなどが必要な場合、Burp のマクロ機能を利用すると便利です。

はじめに

bWAPP の ログイン画面 —> ログイン後のトップページ —> 診断対象 といった画面遷移に対して、マクロ機能を利用して、セッションハンドリングする場合を例に

<ログイン画面>

<ログイン後のトップページ>

<診断対象(Go クリック時の HTTP リクエスト)>

<Go クリック時の HTTP リクエスト>

POST /bWAPP/xss_post.php HTTP/1.1

~省略~

Cookie: PHPSESSID=vdidk5b32r8f3jgn2eghkev4f4; security_level=0

firstname=abass1&lastname=abass2&form=submit

マクロ機能の設定方法

Project options - Sessions をクリックします。

Session Handling RulesAdd をクリックします。

Scope タブで下記を設定します。

  • Tools Scope

    • Intruder、Sacnner、Repeater、Extender などマクロ機能を利用するツールをチェックします。
  • URL Scope

    • 診断対象のURLを入力します。
    • この URL の HTTP リクエスト時にマクロ機能が動作します。

Details タブで Rule Description に任意の命名を入力します。

Add から Run a macro をクリックします。

Add をクリックします。

Re-record macro をクリックします。

マクロ機能で送信したい HTTP リクエストを選択して、OK をクリックします。事前に、HTTP history で色を変えておくと探すのが楽です。

OK をクリックして設定画面を閉じます。

マクロ機能の動作テスト

設定したマクロ機能の動作テストを行います。

Proxy から診断対象の URL を右クリックして、Send to Repeater をクリックします。

Repeater タブで Send をクリックしてマクロの動作テストを行います。ログイン後に発行された PHPSESSID が該当リクエストにセッションハンドリングされて HTTP リクエストが送信され、正常にレスポンス結果を受け取っています。

Logger++ を利用すると、HTTP リクエストの履歴を確認できるので詳細を確認します。

マクロ機能でログインしています。

ログイン後に発行された PHPSESSID を利用してトップページにアクセスしています。

ログイン後に発行された PHPSESSID を利用して診断リクエストが送信され、正常にレスポンスを受け取っています。

補足

マクロ機能の種類

色々なマクロ機能ありますが、主に下記の2つを利用しています。

  • Run Macro

    • 診断リクエストの前に何かしらの処理が必要なときに利用しています。今回のようにログイン後の機能を診断したいときや、決済リクエストの前にアイテムをカートに入れる必要があるときなどです。
  • Run a post-request macro

    • 診断リクエストのあとに何かしらの処理が必要なときに利用しています。診断リクエストでコメントを記入してその後にコメントを削除しておきたい場合や診断リクエストの結果が別ページに出力される場合などです。

Run a post-request macro 利用時の補足

Active Scan で Run a post-request macro を利用する場合は下記パターンによってオプション設定を考慮する必要があります。

  • 診断リクエストのレスポンス結果を評価
  • 診断リクエストのレスポンス結果ではなく、マクロ機能で送信された最後の HTTP リクエストのレスポンス結果を評価

具体的には下記の設定箇所になります。オプション設定を見落としやすいので注意が必要です。

  • The response from the current request, issued prior to the macro

    • 診断リクエストのレスポンス結果を評価したい場合にチェックします。
  • The final response from the macro

    • 診断リクエストのレスポンス結果ではなく、マクロ機能で送信された最後の HTTP リクエストのレスポンス結果を評価したい場合にチェックします。

次回は、Burp のマクロ機能で工夫が必要な CSRF トークンなどをセッションハンドリングする方法を記事にしようと思います。