sqlmap でウェブサイトをクロールしてインジェクションポイントを発見する

Kali LinuxBeginner
オンラインで実践に進む

はじめに

SQL インジェクションは、アプリケーションがデータベースに対して行うクエリに攻撃者が干渉することを可能にする一般的な Web 脆弱性です。sqlmap は、SQL インジェクションの脆弱性を検出し、悪用し、データベースサーバーを乗っ取るプロセスを自動化するオープンソースのペネトレーションテストツールです。

sqlmap は主にインジェクションテスト機能で知られていますが、ターゲット Web サイトをクロールして潜在的なインジェクションポイントを発見するための強力な機能も備えています。これは、特定の URL やパラメータを念頭に置いていない場合に特に役立ち、sqlmap にサイトを探索させ、インジェクションの可能なすべてのエントリーポイントを特定させることができます。

この実験では、sqlmap のクロール機能を利用して、ターゲット Web サイト上の URL やフォームを自動的に検出し、SQL インジェクションの脆弱性がないかテストする方法を学びます。ルート URL を特定し、--crawlフラグを使用し、クロール深度を設定し、操作を実行し、最終的に発見されたインジェクションポイントを確認します。

ターゲット Web サイトのルート URL を特定する

このステップでは、sqlmap がクロールを開始するターゲット Web サイトのルート URL を特定します。これは、sqlmap がリンクやフォームを発見し始めるためのエントリーポイントです。この実験では、ローカルで実行されているシンプルな Web サーバーを使用します。

まず、Web サーバーが実行されており、アクセス可能であることを確認しましょう。curlを使用して、サーバーが応答するかどうかを確認できます。

curl http://127.0.0.1:8000

HTML 出力が表示され、サーバーがアクティブであることを示しているはずです。このターゲット Web サイトのルート URL は http://127.0.0.1:8000 になります。

次に、この URL を sqlmap の開始点として使用します。

--crawl フラグを使用してリンクとフォームを発見する

このステップでは、sqlmap で--crawlフラグを使用する方法を学びます。このフラグは、sqlmap にターゲット Web サイトをクロールさせ、SQL インジェクションの脆弱性がないかテストするための新しい URL やフォームを発見するように指示します。このフラグがない場合、sqlmap は明示的に提供された URL のみをテストします。

--crawlを使用するための基本的な構文は次のとおりです。

sqlmap -u < target_url > --crawl

ターゲット URL で--crawlフラグを付けて sqlmap を実行してみましょう。このコマンドはクロールプロセスを開始します。

sqlmap -u http://127.0.0.1:8000 --crawl

sqlmap が Web サイトのクロールを開始し、リンクやフォームを特定しているのが表示されます。プロセス中にいくつかの質問をされます。この実験の目的のため、プロンプトが表示されたときに Enter を押すか y と入力して、デフォルトのオプションを受け入れることができます。

例えば、「結果を CSV ファイルに保存しますか?」と尋ねられた場合は、n と入力して Enter を押すことができます。「その他の一般的な脆弱性をテストしますか?」と尋ねられた場合は、n と入力して Enter を押すことができます。

クロール深度を --crawl-depth=2 で設定する

このステップでは、--crawl-depth フラグを使用して特定のクロール深度を設定することで、クロールプロセスを洗練させます。クロール深度は、sqlmap が新しい URL を発見する際に何レベル深く探索するかを決定します。深度 1 は、初期 URL から直接リンクをたどるだけであることを意味します。深度 2 は、初期 URL からのリンクをたどり、次にそれらの新しく発見されたページからのリンクをたどることを意味します。

私たちの小さなターゲット Web サイトでは、深度 2 であれば、利用可能なすべてのページを発見するのに十分です。

クロール深度を設定するための構文は次のとおりです。

sqlmap -u <target_url> --crawl --crawl-depth=<depth_value>

今回はクロール深度を 2 に指定して、sqlmap を再度実行してみましょう。

sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2

sqlmap の出力がどのように変化するかを観察してください。サイト構造を深く探索するにつれて、より多くのリンクやフォームが発見される可能性があります。ここでも、追加テストのプロンプトが表示された場合は、Enter を押してデフォルトを受け入れるか、n と入力してスキップできます。

クロールとテスト操作を実行する

このステップでは、完全なクロールとテスト操作を実行します。前のステップではクロールフラグを実演しましたが、sqlmap はデフォルトで発見された URL のインジェクションポイントのテストも試みます。テストをより明確にし、sqlmap が徹底的なチェックを実行することを保証するために、プロンプトへの応答を自動化する--batchフラグと、フォームを特にターゲットにする--formsフラグを追加できます。

--batchフラグは、sqlmap に非対話モードで実行するように指示し、すべてのプロンプトに対してデフォルトの回答を受け入れます。これは自動化に役立ちます。--formsフラグは、sqlmap にターゲット上の HTML フォームを解析してテストするように具体的に指示します。

これらのフラグを以前のコマンドと組み合わせてみましょう。

sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2 --batch --forms

このコマンドは以下のことを行います。

  1. http://127.0.0.1:8000 からクロールを開始します。
  2. 2 レベル深く探索します (--crawl-depth=2)。
  3. プロンプトに自動的にデフォルト値で応答します (--batch)。
  4. HTML フォームを specifically 探し、テストします (--forms)。

出力を観察してください。sqlmap は、発見した URL とテストするパラメータをリスト表示します。また、潜在的なインジェクションポイントが見つかったかどうかを示すこともあります。

発見された URL と潜在的なインジェクションポイントを確認する

この最終ステップでは、sqlmap の出力をレビューして、どの URL やフォームが発見され、潜在的なインジェクションポイントが特定されたかを理解します。

sqlmap の実行が完了すると、その発見事項の概要が提供されます。「parameter is vulnerable」といったメッセージやそれに類する行を探してください。

単純なダミーサイトでは SQL インジェクションの脆弱性が確認されなくても(これは予想されることです)、sqlmap はテストした URL とパラメータを依然として表示します。この情報は、手動分析やさらなる自動テストにとって非常に重要です。

表示される可能性のある出力スニペットの例:

...
[INFO] retrieved new form: 'http://127.0.0.1:8000/search.php' (GET)
...
[INFO] testing GET parameter 'id'
...
[INFO] testing GET parameter 'param'
...
[INFO] testing GET parameter 'query'
...

重要な点は、sqlmap がサイトのクロールに成功し、index.phppage.php、およびsearch.php(フォーム経由)を特定し、その後それぞれのパラメータ(idnameparamquery)のテストに進んだことです。これは、ターゲットアプリケーションのアタックサーフェスを自動的にマッピングする sqlmap のクロール機能の強力さを示しています。

より詳細なレポートについては、sqlmap のログファイル(通常は~/.sqlmap/output/にあります)を確認することもできますが、この実験(lab)ではコンソール出力で十分です。

まとめ

この実験(lab)では、sqlmap の強力なクロール機能を使用して、ターゲットウェブサイト上の潜在的な SQL インジェクションポイントを発見する方法を学びました。まずルート URL を特定し、次に--crawlフラグを使用して sqlmap にサイトを探索するように指示しました。--crawl-depthで特定の深度を設定することにより、クロールプロセスをさらに洗練させました。最後に、--batch--formsを使用して包括的なクロールとテスト操作を実行し、プロセスを自動化してフォームを specifically ターゲットにしました。

この実験(lab)を完了することで、以下の方法を理解しました。

  • sqlmap のクロールを開始する URL を特定する。
  • --crawlフラグを使用してリンクやフォームを発見する。
  • --crawl-depthでクロールの深度を制御する。
  • --batch--formsを使用して自動化されたクロールとテスト操作を実行する。
  • sqlmap の出力を解釈して、発見された URL、パラメータ、および潜在的なインジェクションポイントを特定する。

このスキルは、ウェブペネトレーションテストにおける偵察の基本であり、特定の脆弱性を悪用しようとする前に、ウェブアプリケーションのアタックサーフェスを効率的にマッピングすることができます。