はじめに
Burp Suite は、Web アプリケーションのセキュリティテストのための強力なプラットフォームです。その中でも最も汎用性の高いツールの 1 つが Burp Intruder であり、Web アプリケーションに対してカスタマイズされた攻撃を自動化することができます。Intruder には、それぞれ異なるテストシナリオ向けに設計された、いくつかの攻撃タイプがあります。
Pitchfork 攻撃タイプは、複数のパラメータに対して、異なるが関連性のあるペイロードを同時にテストする必要がある場合に使用されます。これは、マークされた各位置に対して個別のペイロードリストを使用します。攻撃中、Intruder は最初のリストから最初のペイロードを取得し、2 番目のリストの最初のペイロードとペアにし、次に 2 番目のペイロードと 2 番目のペイロードをペアにする、といった具合に進みます。これは、既知のユーザー名とパスワードのペアのリストのようなものをテストするのに理想的です。
この実験(Lab)では、単純なログインフォームに対して Burp Intruder で Pitchfork 攻撃を設定し、実行する方法を学びます。
2 つのパラメータを持つリクエストを Intruder に送信する
このステップでは、Burp Suite を起動し、ログインリクエストをキャプチャして、Intruder ツールに送信して変更します。ラボ環境では、テスト用のシンプルな Web アプリケーションがすでに起動されています。
まず、デスクトップからターミナルを開き、Burp Suite を起動します。通常、アプリケーションメニューで見つけるか、コマンドラインから起動できます。この実験(Lab)では、ターミナルから起動します。
burpsuite
起動ウィザードで、「Temporary project」を選択して「Next」をクリックし、次に「Start Burp」をクリックします。
Burp Suite が開いたら、「Proxy」タブに移動し、次に「Intercept」サブタブに移動します。「Open Browser」ボタンをクリックします。これにより、Burp のプロキシと連携するように事前に設定された Chromium ブラウザが起動します。
Burp ブラウザで、以下の URL を入力してターゲットアプリケーションに移動します。
http://127.0.0.1:8000
シンプルなログインフォームが表示されます。「Intercept is on」ボタンをクリックして「Intercept is off」に変更し、Burp Suite ウィンドウに戻ってインターセプトをオフにします。これにより、リクエストがアプリケーションに自由に流れるようになります。
次に、ブラウザに戻ります。ユーザー名に test、パスワードに test を入力し、「Submit」をクリックします。
Burp Suite ウィンドウに戻り、「Proxy」>「HTTP history」タブに移動します。履歴リストに POST /login リクエストが表示されているはずです。このリクエストを右クリックし、「Send to Intruder」を選択します。
この操作により、リクエストのコピーが Intruder ツールに送信され、そこで攻撃を設定できます。「Intruder」タブがハイライト表示されているはずです。
両方のパラメータにペイロードマーカーを追加する
このステップでは、Intruder がペイロードを配置するリクエスト内の位置を定義します。Pitchfork 攻撃では、ファズ(fuzz)したい各パラメータの値をマークする必要があります。
「Intruder」タブに移動し、次に「Positions」サブタブに移動します。キャプチャされた POST /login リクエストが表示されます。
Burp Intruder は、しばしば潜在的なペイロード位置を自動的に識別し、「§」記号でマークします。この実験(Lab)では、位置を正確に制御したいと考えています。まず、右側にある「Clear §」ボタンをクリックして、デフォルトのマーカーをすべて削除します。
ウィンドウ下部にあるリクエストボディは次のようになります。
username=test&password=test
username および password パラメータの値にペイロードを挿入したいと考えています。
- リクエストエディタで、
usernameパラメータのtestの値をハイライト表示します。 - 右側の「Add §」ボタンをクリックします。パラメータは
username=§test§のようになります。 - 次に、
passwordパラメータのtestの値をハイライト表示します。 - 再度「Add §」ボタンをクリックします。パラメータは
password=§test§のようになります。
これで、リクエストボディには 2 つのマークされた位置が表示されます。
username=§test§&password=§test§
これらのマーカーは、対応するペイロードセットからのペイロードをどこに配置するかを Intruder に正確に指示します。
攻撃タイプを「Pitchfork」に設定する
このステップでは、「Pitchfork」攻撃タイプを選択します。これは、テストしたいペア化されたペイロード挿入動作を可能にする重要な設定です。
「Intruder」>「Positions」タブにいる間に、画面上部にある「Attack type」ドロップダウンメニューを見つけます。デフォルトでは「Sniper」に設定されている可能性が高いです。
ドロップダウンメニューをクリックします。4 つのオプションが表示されます。
- Sniper: 単一のペイロードセットを使用し、各位置を一つずつ順番に処理します。
- Battering ram: 単一のペイロードセットを使用し、すべての位置に同じペイロードを一度に配置します。
- Pitchfork: 複数のペイロードセットを使用します。セット 1 の最初のペイロードとセット 2 の最初のペイロードをペアにし、2 番目と 2 番目をペアにする、といった具合に進めます。
- Cluster bomb: 複数のペイロードセットを使用し、考えられるすべてのペイロードの組み合わせをテストします。
ユーザー名/パスワードのペアをテストするというシナリオでは、「Pitchfork」が正しい選択です。リストから「Pitchfork」を選択します。
「Pitchfork」を選択すると、この画面でのインターフェースはあまり変化しないことに気づくかもしれませんが、Burp は前のステップで設定した 2 つのペイロードマーカーに対応する 2 つの別々のペイロードリストを処理する準備ができました。
Payloads タブで 2 つの別々のペイロードリストを設定する
このステップでは、Pitchfork 攻撃が使用する 2 つのペイロードリストを設定します。最初のリストにはユーザー名が、2 番目のリストには対応するパスワードが含まれます。
「Intruder」タブ内の「Payloads」サブタブに移動します。
「Pitchfork」攻撃タイプを選択し、2 つのペイロード位置があるため、「Payload set」ドロップダウンメニューが表示されます。これにより、各ペイロードリストを個別に設定できます。
Payload Set 1(ユーザー名)の設定:
- 「Payload set」ドロップダウンが
1に設定されていることを確認します。 - 「Payload type」は「Simple list」である必要があります。
- 下の「Payload Options」セクションで、「Clear」ボタンをクリックしてデフォルトの項目をすべて削除します。
- 「Add」ボタンをクリックし、以下のユーザー名を一つずつ入力します。
userguestadmintest
Payload Set 2(パスワード)の設定:
- 次に、「Payload set」ドロップダウンから
2を選択します。 - ここでも、「Payload type」が「Simple list」であることを確認します。
- 「Clear」ボタンをクリックしてリストを空にします。
- 「Add」ボタンをクリックし、最初のリストのユーザー名に対応する以下のパスワードを入力します。
userpassguestpassword123test
これで、2 つの異なるペイロードリストが設定されました。Pitchfork 攻撃は、これらを順にペア化します。(user, userpass)、(guest, guest)、(admin, password123)、(test, test)となります。リクエストの総数は 4 となり、これはリストのサイズと同じです。
攻撃を実行し、ペア化されたペイロード挿入を観察する
この最終ステップでは、攻撃を開始し、結果を分析して、Pitchfork 攻撃がどのように機能するかを確認します。
攻撃タイプとペイロードを設定したら、開始する準備ができました。「Intruder」タブの右上隅にある「Start attack」ボタンをクリックします。
新しい「Intruder attack (1)」ウィンドウが開き、結果がリアルタイムで表示されます。結果のテーブルを観察します。「Payload 1」と「Payload 2」の列が表示されます。
ペイロードが設定した通りに正確にペア化されていることに注目してください。
- リクエスト 1 は
userとuserpassを使用します。 - リクエスト 2 は
guestとguestを使用します。 - リクエスト 3 は
adminとpassword123を使用します。 - リクエスト 4 は
testとtestを使用します。
次に、「Status」と「Length」の列を確認します。ほとんどのリクエストは同じステータスコード(例:200)とレスポンス長を持ち、ログイン失敗を示している可能性が高いです。しかし、1 つのリクエストが際立っているはずです。ペイロードペア admin と password123 を持つリクエストが、正しい認証情報セットです。このリクエストでは、異なるサーバーレスポンス(例:「Login successful!」メッセージ)を示す、異なるレスポンス長が表示されるはずです。
期待される結果の例:
| Request | Payload 1 | Payload 2 | Status | Length |
|---|---|---|---|---|
| 1 | user | userpass | 200 | 450 |
| 2 | guest | guest | 200 | 450 |
| 3 | admin | password123 | 200 | 452 |
| 4 | test | test | 200 | 450 |
この違いを観察することで、Pitchfork 攻撃を使用して有効な認証情報を特定することに成功しました。これで攻撃ウィンドウを閉じることができます。
まとめ
この実験では、Burp Intruder を使用して Pitchfork 攻撃を正常に設定し、実行しました。
以下の方法を学びました。
- Burp Proxy を使用してウェブリクエストをインターセプトし、Intruder に送信する方法。
- 複数のパラメータ位置にペイロードマーカーを手動で設定する方法。
- 関連する複数パラメータのファジング用に設計された
Pitchfork攻撃タイプを選択する方法。 - ユーザー名およびパスワードパラメータに対して、別々に対応する 2 つのペイロードリストを設定する方法。
- 攻撃を開始し、結果を分析して異常を特定し、ペア化されたペイロード挿入を観察することで正しいログイン認証情報を正常に見つける方法。
Pitchfork 攻撃は、ユーザー名とパスワード、またはその他のペア化されたデータセットなど、複数のパラメータのデータがリンクされているシナリオをテストするための貴重なテクニックです。
