Burp Intruderによるログイン機構へのブルートフォース

Burp Intruderはさまざまな攻撃タイプに対応しています。多くの場合、あるタスクは複数タイプの攻撃で達成できます。しかし適切なタイプを選択すれば、手動によるセキュリティテストの労力を大幅に削減できます。

このチュートリアルでは、クラスター爆弾攻撃タイプを使って、ユーザ名とパスワードのフィールドを同時にブルートフォースする方法を紹介します。

クラスター爆弾攻撃は、Burp Suite Community Editionのユーザには適していないかもしれません - Burp Suite Professionalに搭載されているフルスピード版のBurp Intruderがありません。

クラスター爆弾とは?

クラスター爆弾(Cluster bomb)攻撃タイプは、定義されたポジションごとに別のペイロードセットを割り当てます。そして各セットから順番にペイロードを配置します。これは、複数の異なる入力値を複数の場所に挿入し、可能な限りのあらゆる組み合わせをテストする攻撃に便利です。

クラスター爆弾攻撃を使用する場合、定義されたペイロードの数に応じて生成されるリクエスト数が指数関数的に増加します。つまりこの攻撃タイプは主に、比較的小さいデータセットでの反復処理を想定しています。

このチュートリアル例にある101個のユーザ名と100個のパスワードでは、10100個(101 * 100 = 10,100)の攻撃リクエストが生成されます。

クラスター爆弾攻撃によるログインのブルートフォース

下記にあるラボの課題では、2つの別々のスナイパー(Sniper)攻撃を使って解くよう提案していますが、今回はクラスター爆弾攻撃で解いてみます。クラスター爆弾攻撃で複数のペイロードセットを使用して、ユーザ名とパスワードフィールドを同時にテストできます。

クラスター爆弾攻撃を使用するとより多くのリクエストが送信されることになるため、スナイパー攻撃を2回行うよりも効率が悪いです。しかしスナイパー方式とは異なり、有効なユーザ名を列挙する必要はありません。

Burpブラウザは、暗号化されたHTTPSプロトコルでもHTTP通信を簡単にプロキシできます。設定は不要で、Proxyタブを開き、ブラウザを開くをクリックし、Intercept無効になっているか確認してください。

ステップ1: ラボを開く

Burpブラウザを開き、次のURLにアクセスします:

https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses

Access the labをクリックしプロンプトが表示されたら、自分のPortSwiggerアカウントでログインします。

ステップ2: ログインリクエストをインターセプト

ラボで、My accountリンクをクリックし、ログインページを開きます。

UsernamePasswordフィールドに、後で確認するためのサンプルデータを入力します。Log inボタンをクリックします。

Webセキュリティアカデミーのログインフォームへ入力

Burp Suiteで、Proxyタブに移動し、HTTP履歴タブをクリックします。すると、Burp Suiteを開いた後にBurpブラウザが生成したHTTPリクエストの一覧が表示されます。

MethodPOSTで、URL/loginのリクエストを探し、それをクリックします。

Burp Suite ProfessionalのHTTP履歴に表示されるログインリクエスト

ステップ3: インターセプトされたリクエストをIntruderに送信する

Intruderへリクエスト送信

先程選択したリクエストを右クリックして、Intruderに送信をクリックします。

Intruderタブをクリックします。リクエストがBurp Intruderに送信され、ペイロードポジション(§マークで区切られている)が3箇所に挿入されていることに注目してください。

ステップ4: ペイロードポジションを設定する

自動設定された挿入ポイントがあるBurp Intruderのリクエスト

このラボに解答するには、ユーザ名とパスワードのペイロードポジションのみが必要です。§クリアをクリックして、すべてのポジションをクリアします。

ユーザ名フィールドで入力したデータを選択し、§追加をクリックすると、ペイロードポジションとしてマークされます。

Burp Intruderで選択されたユーザ名フィールド

同様にパスワードフィールドで入力したデータにも行い、両方のフィールドにマークを付けます。

Burp Intruderで挿入ポイントとして設定されたユーザ名とパスワードフィールド

ステップ5: クラスター爆弾攻撃を設定し実行する

攻撃タイプ選択のドロップダウンで、クラスター爆弾を選択します。

Burp Intruderでクラスター爆弾攻撃タイプの選択

ペイロードタブをクリックします。ペイロードセット1に、ペイロードタイプ単純リストに設定されているか確認してください。

ペイロードオプション[単純リスト]で、ユーザ名候補のリストをボックスに貼り付けます。

Burp Intruderで設定されたユーザ名のペイロード

ペイロードセット2を選択します。

ペイロードオプション[単純リスト]で、パスワード候補のリストをボックスに貼り付けます。リクエスト数が10,100に増えていることに注目してください。

Burp Intruderで設定されたパスワードペイロード

攻撃開始をクリックします。

ペイロードセットは、ペイロードセットが挿入される位置ごとに定義します。例えば、リクエストテンプレート内に2つのペイロードポジションを定義した場合、ペイロードセット1は1つ目に、ペイロードセット2は2つ目に挿入されます。

Burp Intruder攻撃結果

Intruderが、ペイロードセット1の各項目とペイロードセット2の最初の項目を組み合わせたリクエストを作成した後に、ペイロードセット2の次の項目に移って処理を繰り返していることに注目してください。これは、ペイロードセット2の最後に到達するまで行われます。

ステップ6: 攻撃結果を分析して正しいユーザ名とパスワードを特定する

実行が終了するまで攻撃を待ちます - 特に、Burp Suite Community Editionに付属している速度制限されたBurp Intruderを使用している場合は、数分かかることがあります。

Status列のヘッダをクリックすると、レスポンスのリストがHTTPステータスコードでソートされます。さらに数回クリックする必要があるかもしれません。

ほとんどのリクエストが200 (OK)ステータスコードであるのに対し、1つのリクエストが302 (Found)であることに注目してください。このリクエストで使用されたユーザ名とパスワードをメモしてください - これらがラボに解答するための正しいログイン情報です。なお、次のスクリーンショットのような組み合わせになる可能性は低いと思われます。

興味深いリクエストが選択されたBurp Intruder攻撃結果

Proxyタブで、Intercept無効になっていることを確認します。

Burpブラウザで、ラボのログインページに戻り、302ステータスコードでメモしたユーザ名とパスワードを入力します。Log inをクリックします。これでラボを解答できます。

正しいユーザー名とパスワードが入力されたWebセキュリティアカデミーのログインフォーム

まとめと次のステップ

おめでとうございます - Burp Intruderでクラスター爆弾攻撃を設定して、単純なログインフォームをより簡単にブルートフォースする方法を学びました。

実際のWebアプリケーションには、ブルートフォース攻撃を阻止するための強固な対策がされていることが多いです。これらを回避する方法を知りたい場合は、Webセキュリティアカデミー認証に関するトピックを参照してください。