検出 & フィンガープリント
まず注入点と DBMS を特定する。エラー表示の有無、真偽レスポンスの差分、応答時間の3軸で判定する。
プローブ (注入確認)
エラー文 自動解析 (貼り付け)
画面/レスポンスに出た SQLエラー文をそのまま貼ると、DBMS・バージョン・near 断片・エラー経由のリーク値 (XPATH / Duplicate entry / CAST系) を解析して次の一手を提案する。
データベース フィンガープリント
コメント一覧
ログインバイパス (認証回避)
パスワードが md5($_POST[pw]) 等でハッシュ比較される場合はバイパス不能 → ブラインド/UNIONでリークする方向へ。
UNION SELECT ビルダー
カラム数特定 → 表示列特定 → 情報取得 → テーブル/カラム列挙 → データ抽出。必要なペイロード列を全部まとめて生成する。
① カラム数特定 (総当たり)
② 表示列の特定
③ 基本情報 (version / db / user)
④ テーブル・カラム列挙 → データ抽出
⑤ 複数行の扱い
⑥ information_schema が使えない時
⑦ テーブル名・カラム名総当たり辞書
スキーマ参照が不可能/面倒な時は、ありきたりな名前を総当たりする。生成されたペイロードを Intruder に流す。
⑧ 特殊コンテキスト (ORDER BY / LIMIT / INSERT / UPDATE / LIKE検索)
WHERE 以外が注入点の場合、UNION の形そのものが変わる。文脈を選ぶと専用ペイロードを出す。
⑨ 横断列挙 (全DB検索 / ユーザー / ハッシュ / 権限) — sqlmapの --search/--users/--passwords 相当
エラーベース
エラーメッセージに値を吐かせる。UNION不要・表示列不要で一番手軽。MySQL の XPATH系は32文字制限があるので substr で分割すること。
ブラインド (Boolean / Time-based) 工房
出力が一切無い場合でも、真偽の差分か遅延で1ビットずつ抜く。ここでは式の組み立てと、全自動化スクリプトの生成を行う。
長さ特定
1文字特定 (等値 / 二分探索 / LIKE)
時間ベース (条件付き遅延)
全自動抽出スクリプト生成 (Python)
NoSQL (MongoDB) インジェクション
最近のCTFで頻出。PHP が $_GET/$_POST をそのまま Mongo クエリに渡す実装が標的。param[$ne]= 形式で演算子を注入する。
検出
認証バイパス
盲注 ($regex / $where)
$regex 全自動抽出スクリプト生成 (Python)
RCE / OOB チェーン ビルダー
スタックドクエリ (PG/MSSQL) や FILE権限 (MySQL) があればコマンド実行まで行ける。コールバック先 (自分のIP/ポート/dnslogドメイン) を入れると即席チェーンを生成する。
ファイル読み取り (--file-read 相当)
スタックドクエリ対応表
バイパス設定 (全タブに自動適用)
ここで有効にしたフィルタは 検出 / UNION / エラー / ブラインド の全ペイロードに自動変換して反映される。まず問題のソースを貼って自動検出 → 細部はチップで調整。
① ソースコード解析 (自動検出)
② フィルタ選択 (全ペイロードに適用)
③ 手動変換プレイグラウンド (1個だけ試す時)
変換ログ
代替案
④ ブラックボックス・フィルタ逆探査 (ソース無し時)
各プローブを1個ずつ送り、ブロック/エラー/画面差分が出たものにチェック → 「反映」でチップ化。Intruder に流すなら一括コピー。
エンコーダ / デコーダ / 変換ツール
スペース代替一覧
カンマ回避一覧
= の代替一覧
文字列連結 (DBMS別)
curl コマンド生成
sqlmap コマンド生成 (tamper自動提案)
バイパス設定のフィルタ内容から最適な tamper を選んでコマンドを組み立てる。認証が必要な題材は Burp でリクエストを保存して -r req.txt を使う。
チートシート (CTFパターン事例集)
Writeup頻出パターンを技法別にまとめた総覧。検索ボックスで絞り込みできる。