sqlmapの使い方と安全な活用ガイド|オプション解説・検証環境での実践例付き

SQLインジェクションの脆弱性が存在する兆候がある場合、sqlmapを使うことがあります。

ただし、脆弱性を報告する予定で既にSQLインジェクションを確認できているのであればsqlmapは使わない方が無難です。

というのも、SQLインジェクションの脆弱性が存在することを確認できているにも関わらずsqlmapでデータベースをダンプするなど情報漏洩につながる行為をすると敵対行為と見なされる場合があるためです。

トラブルを避けるためにも必要以上の攻撃は避けた方が無難です。

本記事は、セキュリティ教育・防御・社内検証目的のラボ環境での利用を前提としています。
第三者のシステムや公開サーバーに対してsqlmapを使用する行為は、不正アクセス禁止法などの法令に違反する可能性があります。

目次

sqlmapとは?

sqlmapは、SQLインジェクションの脆弱性を自動検出・検証できるオープンソースツールです。
脆弱なWebアプリケーションを安全な環境でテストするために使用され、次のような用途で利用されます。

  • セキュリティテストや脆弱性診断の自動化
  • ペネトレーションテスト(許可された範囲内)
  • CTF(Capture The Flag)や教育環境での学習

既に脆弱性を特定済みで報告予定の場合、追加攻撃(データベースダンプ等)は避けるのが賢明です。
不必要なアクセスは敵対行為とみなされる可能性があります。

sqlmapの基本的な使い方

URLを指定して実行する

最低限必要なのはURLを指定する-uオプションです。

sqlmap -u "https://example.com/login.php?id=x"

POSTメソッドの場合は--dataオプションでデータを指定します。

sqlmap -u https://example.com/login.php --data="id=x"

POSTパラメータを指定することで、ログインフォームやAPIエンドポイントの検証も可能になります。

SQLインジェクションを検出できない場合はlevelriskを調整して更に詳しく調査を進めることができます。

levelオプション(テスト範囲を広げる)

--level は検査対象をどの範囲まで拡張するかを指定します。初期値は 1、最大値は 5 です。

leve 2からCookieヘッダーがテストに追加され、level 3ではユーザーエージェントやリファラがテストに追加されます。level 5は最も高いレベルでHostヘッダーをテストに追加します。

level内容
1基本的なパラメータのみ
2Cookieヘッダーも対象に含める
3User-Agent, Referer も対象
4ペイロードパターンを増やす
5Hostヘッダーまで含む最大テスト範囲

脆弱性の有無を確認する場合はlevel 5でチェックすることをおすすめします。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --level=5

riskオプション(テストの危険度)

--risk はSQL実行時の影響範囲を制御します。初期値は 1、最大値は 3 です。

risk 1はデータベースに影響を与えません。risk 2は大量のクエリ時間ベースの SQL インジェクションテストが追加されます。risk 3はORベースの SQL インジェクション テストが追加されます。

risk安全性概要
1読み取り専用のクエリ
2時間ベースのテストを追加
3ORベースなど高リスクなテストを実施(※破壊の恐れあり)

risk 3はWEBアプリケーションのSQL文によりますがテーブルを破壊してしまう場合があるため、細心の注意が必要です。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --level=5 --risk=3

--risk=3CTFや許可済み検証環境限定で使用してください。本番サイトでは厳禁です。

データベース情報の列挙とダンプ

脆弱性が確認できた後に行う調査ステップです。

データベース名を列挙する

--dbsオプションでデータベース名を列挙します。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --dbs

デーブル一覧を列挙する

データベース名を列挙できたら--tablesオプションでデータベースのテーブルを列挙します。データベース名は-Dオプションで指定します。

sqlmap -u https://example.com/login.php --data="user=x&password=y" -D users --tables

ダンプ(データ取得)する

データベースをダンプしたい場合は--dumpオプションを使いますが、本当にこのオプションを使ってデータベースをダンプする必要があるのか検討してください。冒頭に書いたようにバグ報告する場合は必要以上の攻撃は避けた方が無難です。

データベースとテーブルを指定してダンプする場合は-Dオプションでデータベース名を指定し-Tオプションでテーブル名を指定します。

sqlmap -u https://example.com/login.php --data="user=x&password=y" -D users -T login --dump

アクセス可能なすべてのデータベースをダンプしたい場合はデータベース名とテーブル名を指定せずに実行します。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --dump

無断でのデータダンプは厳禁。
目的が脆弱性検証のみなら --dbs までに留めるのが原則です。

パフォーマンス調整:スレッド数

--threads でスレッド数を増やすと高速化が可能です(最大10)。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --dump --threads=10

ただし、環境によっては過負荷や接続不安定を引き起こすため、5〜7程度がおすすめです。

テクニックオプション:--technique

--technique ではSQLインジェクション手法を限定できます。

記号テクニック内容
BBoolean-based blind真偽判定方式
EError-basedエラー出力利用
UUnion query-basedUNION句利用
SStacked queries複数クエリ実行
TTime-based blind時間差方式
QInline queriesサブクエリ注入

sqlmapは6つのテクニックを使ってSQLインジェクションのテストを実行しますが、どのテクニックを使うのか指定することもできます。

テクニックオプションの初期値は--technique=BEUSTQです。

通信環境が不安定な場合や時間を節約したい場合は「T」を外してTime-based blindをスキップさせる、といったことができます。

例:Time-based blind を除外する場合

sqlmap -u https://example.com/login.php --data="user=x&password=y" --technique=BEUSQ

ファイルダウンロード

バックエンド データベース管理システムが MySQL、PostgreSQL、または Microsoft SQL Server である場合、権限が許す範囲内でファイルをダウンロードできます。ファイルはテキストベースでもバイナリベースでも問題ありません。

sqlmap -u https://example.com/login.php --data="user=x&password=y" --file-read=/etc/passwd

HTTPリクエストをファイルから読み込む

複雑なリクエストはBurp Suiteなどでリクエストをファイルに保存して指定できます。

  1. Burp Suite → Request画面で「Copy to file」
  2. 保存したリクエストを -r オプションで指定

リクエストをファイルに保存するには以下のスクリーンショットのようにBurp SuiteのRequestの画面で右クリックし「Copy to file」でHTTPリクエストをファイルに保存します。

保存したファイルを-rオプションで読み込みます。

sqlmap -r login.req

これによりCookieや複雑なPOSTデータも正確に再現できます。

検証時の注意点まとめ
  • 実験・教育目的に限定する
  • ダンプは「確認済み脆弱性」への再攻撃と誤解されやすい
  • 常に対象システムの許可を取得してから実施する
  • 実施記録を残して後で報告できるようにしておく

よくある質問(FAQ)

sqlmapは不正ツールではないのですか?

不正ではありません。脆弱性診断・教育目的の正当利用が前提です。

本番環境に対して使っても大丈夫?

原則NGです。必ず検証用サーバやラボ環境で利用してください。

Time-basedやrisk=3が危険なのはなぜ?

テーブル構造を破壊する可能性や、システム遅延・停止を引き起こす可能性があるためです。

Burp Suiteと組み合わせる理由は?

リクエストを正確に再現し、Cookieやトークン付きのセッションを再利用できるためです。

まとめ

sqlmapはSQLインジェクション検証を自動化できる強力なツールです。

しかしsqlmapは武器にもなるため、--level--risk の使い方を理解して安全にテストすることが重要です。

実施は検証環境限定・許可取得後に行うこと。正しく使えば、セキュリティ教育や防御強化に欠かせない学習ツールになります。

参考資料

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。
また、スパム対策のため投稿して頂いたコメントが表示されるまで時間がかかる場合があります。

目次