はじめに
サイバーセキュリティの世界では、データベース構造を理解することは、Web アプリケーションのセキュリティ体制を評価する上で極めて重要なステップです。SQL インジェクションの脆弱性は機密情報を漏洩させる可能性があり、sqlmapのようなツールは、そのような欠陥の発見と悪用を自動化するために不可欠です。
この実験(Lab)では、sqlmapの機能の中でも特に重要かつ具体的な側面、すなわちデータベース内のテーブルの列挙に焦点を当てます。潜在的な SQL インジェクションポイントを特定し、利用可能なデータベースをリストアップした後、次に論理的なステップは、特定のデータベースをさらに深く掘り下げ、そのテーブル構造を理解することです。この知識は、特定のテーブルから機密データをダンプするなど、さらなる悪用にとって不可欠です。
この実験(Lab)を終える頃には、sqlmapを使用して特定のデータベースをターゲットにし、関連するすべてのテーブルをリストアップする能力を習得しているでしょう。これは、ペネトレーションテスターやセキュリティ愛好家にとって基本的なスキルです。
列挙されたリストからターゲットデータベースを選択する
このステップでは、事前にデータベースを列挙したと仮定し、焦点を当てるデータベースを選択します。実際のシナリオでは、利用可能なすべてのデータベースをリストアップするために、すでにsqlmapを--dbsフラグ付きで実行しているはずです。この実験(Lab)では、acuartという名前のデータベースをターゲットとして特定したと仮定します。
まず、sqlmapが利用可能であることを確認します。インストールされていない場合は、sudo apt update && sudo apt install sqlmap -yを使用してインストールできます。
ターゲットとして、既知の脆弱性を持つ URL を使用します。デモンストレーション目的で、http://testphp.vulnweb.com/listproducts.php?cat=1を使用します。
開始するために、ターゲットで利用可能なデータベースをリストアップしましょう。このコマンドは、sqlmapがチェックを実行するため、実行に時間がかかります。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
以下のような出力が表示され、データベースがリストアップされます。
---
[INFO] fetching database names
[INFO] the back-end DBMS is MySQL
...
available databases [X]:
[*] acuart
[*] information_schema
[*] mysql
[*] performance_schema
...
このリストから、さらなる列挙のためにacuartを選択します。
-D フラグを使用してデータベースを指定する
このステップでは、sqlmapにどの特定のデータベースと対話したいかを指示する方法を学びます。これは、-D(または--db)フラグの後にデータベース名を指定することで実現されます。
前のステップでターゲットデータベースとしてacuartを特定したことに続き、ここではsqlmapにこの特定のデータベースに操作を集中するように指示します。
データベースを指定するための一般的な構文は次のとおりです。
sqlmap -u "TARGET_URL" -D "DATABASE_NAME" [OTHER_FLAGS]
この実験(Lab)では、データベース名としてacuartを使用します。まだテーブルをリストアップしているわけではなく、sqlmapのコンテキストを設定しているだけです。
ターミナルで次のコマンドを実行してください。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --current-db
このコマンドは、sqlmapにacuartデータベースをターゲットにし、次に接続している現在のデータベースを特定しようと指示します。これにより、私たちの選択が確認されます。出力は、ターゲットとなっているデータベースがacuartであることを確認します。
---
[INFO] fetching current database
...
current database: 'acuart'
...
--tables フラグを使用してテーブルをリストする
-D フラグを使用してターゲットデータベースを指定した後、次の論理的なステップは、そのデータベース内のテーブルをリストすることです。ここで--tablesフラグが登場します。
--tablesフラグは、現在選択されているデータベースに存在するすべてのテーブルを列挙するようにsqlmapに指示します。-Dフラグと組み合わせると、特定のデータベースの構造をマッピングするための強力な方法を提供します。
特定のデータベースのテーブルをリストするための一般的な構文は次のとおりです。
sqlmap -u "TARGET_URL" -D "DATABASE_NAME" --tables
この実験(Lab)では、ターゲット URL、acuartデータベース、および--tablesフラグを組み合わせます。
ターミナルで次のコマンドを実行してください。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
このコマンドは、sqlmapがacuartデータベース内のすべてのテーブルを特定し、リストするプロセスを開始します。この操作は、データベースの複雑さやサイズによっては時間がかかる場合があります。
テーブルを列挙するコマンドを実行する
このステップでは、これまでに学んだすべてのフラグを組み合わせて、特定のターゲットデータベースからテーブルを列挙する完全なsqlmapコマンドを実行します。
ターゲット URL http://testphp.vulnweb.com/listproducts.php?cat=1 を使用し、-D acuart を使用してデータベース acuart を指定し、--tables を使用してテーブルをリストするようにsqlmapに指示します。
ターミナルを開き、次のコマンドを実行してください。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
sqlmapは現在、チェックを実行し、テーブル名の取得を試みます。sqlmapがテストを進めるにつれて、さまざまな[INFO]メッセージが表示されます。
しばらくすると、sqlmapはacuartデータベース内で見つかったテーブルのリストを表示します。出力は次のようになります。
---
[INFO] fetching tables for database 'acuart'
...
Database: acuart
[X] articles
[X] carts
[X] categories
[X] guestbook
[X] pictures
[X] products
[X] users
...
この出力は、sqlmapがacuartデータベース内のテーブルを正常に列挙したことを確認します。
返されたテーブル名のリストを分析する
この最終ステップでは、前のsqlmapコマンドの出力を分析します。返されたテーブル名のリストを理解することは、その後のエクスプロイト(exploitation)ステップを計画する上で非常に重要です。
sqlmapがテーブルを正常に列挙すると、明確で整理されたリストで表示されます。acuartデータベースの場合、articles、carts、categories、guestbook、pictures、products、usersのようなテーブルが表示されているはずです。
これらの各テーブル名は、データベース内に保存されているデータに関する手がかりを提供します。例えば:
users: このテーブルには、ユーザーの認証情報(ユーザー名、パスワード、メールアドレス)が含まれている可能性が非常に高く、攻撃者にとってしばしば主要なターゲットとなります。products: このテーブルには、ウェブサイトで販売されている製品に関する情報が含まれているでしょう。articles、guestbook、categories: これらのテーブルには、コンテンツ関連のデータが含まれている可能性が高いです。
usersテーブルの存在は特に重要です。なぜなら、機密情報が含まれていることが多いからです。実際のペネトレーションテストでは、次のステップは通常、usersテーブル内のカラムを列挙し(--columnsを使用)、その後それらのカラムからデータをダンプすること(--dumpを使用)になります。
この実験(Lab)では、特定のデータベースからテーブルを列挙するという基本的なスキルをsqlmapを使用して習得しました。これは、あらゆる SQL インジェクション評価において重要なステップです。
まとめ
この実験(Lab)では、sqlmapを使用して特定のデータベースからテーブルを列挙する方法を習得しました。ターゲットデータベースの選択の重要性を理解することから始め、-Dフラグを使用してそれを指定し、最終的に--tablesフラグを使用して関連するすべてのテーブルをリストしました。
完全なsqlmapコマンドを実行して列挙を行い、返されたテーブル名のリストを分析し、セキュリティ評価におけるそれらの潜在的な重要性を理解しました。このスキルは、SQL インジェクションの脆弱性を特定および悪用するプロセスにおける基本的な要素であり、データベース構造をマッピングし、さらなるデータ抽出を計画することを可能にします。
このテクニックを習得することで、ウェブアプリケーションの基盤となるデータ構造をナビゲートし、理解する能力が向上しました。これは、あらゆるペネトレーションテストのエンゲージメントにおいて重要なステップです。


