はじめに
この実験では、SQL インジェクションの脆弱性を検出し悪用するプロセスを自動化する強力なオープンソースのペネトレーションテストツールである sqlmap を、Burp Suite のようなインターセプトプロキシと統合する方法を学びます。
プロキシを sqlmap と併用することは、セキュリティ専門家にとって重要なスキルです。これにより、sqlmap が送信している正確なペイロードを確認し、そのテストロジックを理解し、潜在的な問題をデバッグし、さらにはリクエストをリアルタイムで変更することができます。この可視性は、SQL インジェクション攻撃がどのように機能するかを学ぶためにも、より高度でカスタマイズされたセキュリティ評価を実行するためにも非常に価値があります。
この実験の終わりには、sqlmap のトラフィックを Burp Suite 経由でルーティングし、生成されたリクエストを観察し、自動化された攻撃パターンを分析できるようになります。
ローカルポートでリッスンするように Burp Suite を設定する
このステップでは、Burp Suite を起動し、プロキシリスナーがアクティブであることを確認します。Burp Suite は Web プロキシサーバーとして機能し、ブラウザ(この場合は sqlmap)とターゲットアプリケーションの間に中間者として配置されます。デフォルトでは、ローカルマシン(127.0.0.1)のポート8080で着信接続をリッスンします。
まず、Burp Suite を起動しましょう。アプリケーションメニューから見つけることができます。
- Application Menu(画面左上のアイコン)をクリックします。
- Web -> Burp Suite Community Edition に移動します。
- ダイアログボックスが表示されます。デフォルトのままにして、Next をクリックします。
- 別のダイアログでプロジェクトを選択するように求められます。Use Burp defaults を選択し、Start Burp をクリックします。
Burp Suite がロードされたら、プロキシ設定を確認する必要があります。
- Proxy タブをクリックします。
- Proxy タブ内の Options サブタブをクリックします。
- 「Proxy Listeners」セクションを探します。インターフェースが
127.0.0.1:8080で、「Running」チェックボックスがオンになっているエントリが表示されるはずです。
これにより、Burp Suite がローカルポート8080でトラフィックを積極的にリッスンしていることが確認できます。このアドレスとポートにトラフィックを送信するように設定されたアプリケーションは、そのリクエストが Burp Suite によってインターセプトされ、ログに記録されます。
プロキシを使用するように sqlmap を設定する (--proxy=http://127.0.0.1:8080)
このステップでは、先ほど設定した Burp Suite プロキシ経由でネットワークトラフィックを送信するように sqlmap に指示する方法を学びます。
sqlmapは、HTTP プロキシを指定するための簡単なコマンドライン引数--proxyを提供しています。プロキシのアドレスはhttp://<host>:<port>の形式で指定する必要があります。
Burp Suite は127.0.0.1:8080でリッスンしているため、使用する正しい引数は次のようになります。
--proxy=http://127.0.0.1:8080
この引数をsqlmapコマンドに追加すると、sqlmapはリクエストをターゲット Web サーバーに直接送信する代わりに、http://127.0.0.1:8080に送信します。その後、Burp Suite はこれらのリクエストを受信し、ログに記録し、最終的な宛先に転送します。
次のステップでは、このプロキシ引数をターゲット URL と組み合わせてスキャンを実行します。現時点では、この単一のパラメータが 2 つのツールを統合するために必要なすべてであることを理解することが重要です。
基本的な sqlmap スキャンを実行する
このステップでは、テスト Web アプリケーションに対して、Burp Suite 経由でトラフィックをルーティングしながら基本的なsqlmapスキャンを実行します。サーバー上のデータベースを列挙するようにsqlmapに指示します。
ターミナルを開きます。以下の要素を含むコマンドを構築します。
- ターゲット URL:
-u "http://127.0.0.1/index.php?id=1" - プロキシ設定:
--proxy=http://127.0.0.1:8080 - 実行するアクション:
--dbs(データベースを列挙するため) - 非対話フラグ:
--batch(すべての質問に自動的に「yes」と回答するため)
次に、ターミナルで完全なコマンドを実行します。
sqlmap -u "http://127.0.0.1/index.php?id=1" --proxy=http://127.0.0.1:8080 --dbs --batch
sqlmapがターゲットのテストを開始すると、ターミナルにその出力が表示されます。まず、パラメータidが脆弱であることを確認し、次に利用可能なデータベースをリストします。
出力は以下のようなものになります(バージョン番号や一部の詳細が異なる場合があります)。
___
__H__
___ ___[.]_____ ___ ___ {1.x.x#dev}
|_ -| . [.] | .'| . |
|___|_ [.]_|_|_|__,| _|
|_|V... |_| http://sqlmap.org
[INFO] starting @ ...
...
[INFO] GET parameter 'id' is 'MySQL >= 5.0 boolean-based blind' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 stacked queries' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 time-based blind' injectable
...
[INFO] fetching database names
[INFO] the following databases are available [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/127.0.0.1'
sqlmapが実行されている間、数百のリクエストが Burp Suite 経由で送信されています。
Burp Suite の HTTP 履歴で sqlmap が生成したトラフィックを観察する
このステップでは、Burp Suite に戻って、sqlmapがスキャン中に生成したトラフィックを確認します。
Burp Suite ウィンドウを前面に表示します。
- Proxyタブにいることを確認します。
- HTTP historyサブタブをクリックします。
これで HTTP リクエストで満たされたテーブルが表示されます。これらのリクエストはすべて、Burp プロキシ経由でsqlmapがターゲットサーバーに送信したものです。
しばらく時間を取ってリストを観察してください。
- Host: すべてのリクエストは
127.0.0.1に向けられています。 - Method: ほとんどのリクエストは
GETリクエストです。 - URL: URL は常に
/index.phpですが、クエリ文字列のidパラメータはリクエストごとに変化します。
このビューは、sqlmapの活動の完全なログを提供します。単一の脆弱性クラスをテストするために、自動化されたツールが生成するリクエストの量がいかに多いかを確認できます。これがプロキシを使用する主な利点です。ツールの「ブラックボックス」操作を可視化します。
プロキシ経由で sqlmap が送信したペイロードを分析する
このステップでは、個々のリクエストを詳しく見て、sqlmapが SQL インジェクションの脆弱性を検出および悪用するために使用する特定のペイロードを理解します。
Burp Suite のHTTP historyタブで、リスト内のいずれかのリクエストをクリックします。リクエストを選択すると、リストの下にRequestとResponseという 2 つの新しいパネルが表示されます。
Requestパネルをクリックして、sqlmapが送信した生の HTTP リクエストを表示します。URL のidパラメータに特に注意してください。さまざまなペイロードがテストされているのがわかります。
例えば、以下のようなブールベースのブラインドペイロードが見つかるかもしれません。
GET /index.php?id=1%20AND%208003=8003 HTTP/1.1
Host: 127.0.0.1
...
ここでは、sqlmapは真の条件(AND 8003=8003)をインジェクトした場合にアプリケーションが異なる応答をするかどうかをテストしています。%20はスペースの URL エンコードされた表現です。
以下のようなタイムベースのブラインドペイロードが見つかることもあります。
GET /index.php?id=1%20AND%20(SELECT%202079%20FROM%20(SELECT(SLEEP(5)))IImL) HTTP/1.1
Host: 127.0.0.1
...
このペイロードでは、sqlmapはSLEEP(5)コマンドをインジェクトしています。サーバーの応答が 5 秒遅くなる場合、sqlmapはインジェクションが成功し、データベースが脆弱であることを認識します。
これらのリクエストを分析することで、自動化されたスキャナーがどのように機能するかについて、より深い理解を得ることができます。脆弱性を確認するために使用されるロジックを見ることができ、これはターミナルで最終結果を見るよりもはるかに教育的です。
まとめ
この実験では、sqlmap自動スキャンツールと Burp Suite のインターセプトプロキシを正常に統合しました。
以下の方法を学びました。
- Burp Suite を起動し、プロキシリスナーが
127.0.0.1:8080で実行されていることを確認する。 sqlmapの--proxy引数を使用して、すべてのトラフィックを Burp Suite 経由でルーティングする。- プロキシを有効にしてスキャンを実行し、トラフィックを生成する。
- Burp Suite の HTTP history タブで HTTP リクエストの完全なリストを観察する。
- 個々のリクエストを分析して、
sqlmapが脆弱性を特定するために使用するブールベースおよびタイムベースの SQL インジェクションペイロードを理解する。
このテクニックは、自動化ツールの動作に関する重要な洞察を提供し、ペネトレーションテスト中のより大きな制御と分析を可能にするため、あらゆるウェブセキュリティテスターにとって基本的です。


