scroll down
v
// Blind SQL Injectionとは?
1
SQLって何?
ウェブサイトの裏側にはデータベースがあり、 ユーザー情報やパスワードなどのデータを保存しています。 SQL は、そのデータベースに 「このユーザーのパスワードは何?」と質問するための言語です。
あなた → ウェブサイト → データベース
"admin のパスワードを教えて"
↓
SELECT password FROM users
WHERE username = 'admin'2
SQLインジェクションとは?
入力欄に特殊な文字を入れて、 SQLの質問文(クエリ)を書き換えてしまう攻撃です。 プログラマーが想定していない質問をデータベースにさせることができます。
正常な入力: admin SELECT * FROM users WHERE username = 'admin' ← 普通の質問 悪意のある入力: ' OR 1=1 -- SELECT * FROM users WHERE username = '' OR 1=1 -- ^^^^^^^^ 常に真!全員分のデータが返る
3
なぜ「ブラインド」?
普通のSQLインジェクションでは、データが画面に表示されます。 でもブラインドの場合、 データは見えません。 サーバーの反応(成功 or 失敗)だけが手がかりです。
通常のSQLi: 質問 → "パスワードは?" → 回答: "s3cret" ※ 答えが直接見える ブラインドSQLi: 質問 → "1文字目は'a'?" → ✗ NO 質問 → "1文字目は'b'?" → ✗ NO 質問 → "1文字目は's'?" → ✓ YES ※ Yes/No だけで1文字ずつ特定する!
*
たとえるなら...「20の質問ゲーム」
友達が秘密の言葉を考えています。あなたは「はい」か「いいえ」で答えられる質問しかできません。
あなた: "動物ですか?" → いいえ あなた: "食べ物ですか?" → いいえ あなた: "5文字以上ですか?" → はい あなた: "1文字目は's'?" → はい! あなた: "2文字目は'e'?" → はい! ... → 秘密の言葉: "secret"
ブラインドSQLインジェクションはまさにこのゲームです。 データベースに「はい/いいえ」の質問を繰り返して、秘密のデータを1文字ずつ特定します。
4
実際の攻撃フロー
ログインフォーム Username: admin Password: [___入力欄___] ↓ パスワード欄に注入 ' OR SUBSTR(password,1,1)='a' -- ↓ サーバー内部で実行されるSQL SELECT * FROM users WHERE username='admin' AND password='' OR SUBSTR(password,1,1)='a' -- ↓ 結果 ✓ "ログイン成功" → 1文字目は'a' (TRUE) ✗ "ログイン失敗" → 'a'ではない (FALSE)
// 遊び方
📋
01チャレンジを選ぶ
カテゴリと難易度から挑戦する問題を選択しましょう。初めての方は「Boolean基礎」からスタートがおすすめです。
⌨️
02SQLインジェクションを入力
ターミナル風のインターフェースにペイロード(攻撃コード)を入力して送信します。
👁️
03レスポンスを観察
サーバーからの TRUE/FALSE の応答パターンを注意深く分析しましょう。
🔍
04秘密の値を特定
Yes/No の手がかりを組み合わせて、隠された秘密の文字列を1文字ずつ解読します。
🏁
05フラグを提出
FLAG{blind_sqli_...} 形式で回答を提出してクリア!次の問題に自動で進みます。
TIP: 各チャレンジには3段階のヒントが用意されています。詰まったらヒントを活用しましょう!
⚠ 警告
このサイトは教育目的のCTF学習サイトです。 ここで学んだ技術を実際のシステムに対して許可なく使用することは犯罪です。 不正アクセス禁止法により処罰の対象となります。