平成28年度 春期 情報セキュリティスペシャリスト試験 午前Ⅱ 問21
攻撃手法
SQLに関する問題
“アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。また,“;”は SQL 文の終端として解釈されるものとする。
アカウント
| ID | ユーザ名 | メールアドレス |
|---|---|---|
| A001 | TARO JOHO | [email protected] |
| A002 | JIRO JOHO | [email protected] |
| A003 | HANAKO JOHO | [email protected] |
〔SQL 文〕
SELECT ID,ユーザ名,メールアドレス FROM アカウント WHERE ユーザ名 = '[入力パラメタ]';
- ア' OR '--' = '--
- イ' OR ユーザ名 = 'ユーザ名
- ウ'-- OR 1 = 1
- エ¥' OR 1 = 1 ';--
答えと解説を見る
✓ これが正解ア' OR '--' = '--
解説
'--' = '--' は常に真なので、全ての行が取得されます。
入力パラメタを SQL 文の引用符の間にそのまま埋め込み、できあがる文を一つずつ組み立てて確かめます。正解の入力を埋め込むと、条件は ユーザ名 = '' OR '--' = '--' となります。前半はどの行にも当てはまりませんが、後半の '--' は引用符で囲まれた文字列なので、同じ文字列どうしの比較として常に真になります。OR でつながっているので、全ての行が条件を満たします。二つのハイフンが注釈の始まりとして働くのは、文字列の外に置かれたときだけである点がポイントです。
ほかの選択肢はなぜ違うのか
- イ' OR ユーザ名 = 'ユーザ名:埋め込むと ユーザ名 = '' OR ユーザ名 = 'ユーザ名' となります。後半は列の値を文字列 ユーザ名 と比べるだけで、その名前の利用者は表にいません。どの行も当てはまらず、1 行も取得されません。
- ウ'-- OR 1 = 1:埋め込むと空の文字列を閉じた直後に二つのハイフンが文字列の外で現れ、そこから後ろが注釈として無視されます。残る条件は空の文字列との比較だけで、当てはまる行は無く、1 行も取得されません。
- エ¥' OR 1 = 1 ';--:エスケープ処理は行わないので、円記号はただの文字として扱われます。埋め込むと 1 = 1 の後ろに引用符で始まる余分な文字列が続いて文として成り立たず、エラーになります。全ての行は取得されません。
この問題の用語
- アカウントシステムを使う人ごとに割り当てられる、利用のための資格や識別名です。利用者IDとパスワードなどの組で、本人を見分けて使わせます。
- OR数学の手法を使って、いくつかの案から最も有利なものを選ぶ考え方です。期待される費用や利益を計算して比べるときに使います。
出典:平成28年度 春期 情報セキュリティスペシャリスト試験 午前Ⅱ 問21
同じ用語が出る問題
- 令和6年度 春期 午前Ⅱ 問21:SQLに関する問題(OR)
- 令和5年度 春期 午前Ⅱ 問17:SQLインジェクションの問題(アカウント)
- 令和4年度 秋期 午前Ⅱ 問6:パスワードスプレー攻撃の問題(アカウント)
- 令和元年度 秋期 午前Ⅱ 問17:SQLインジェクションの問題(アカウント)
- 令和元年度 秋期 午前Ⅱ 問14:TLSのセキュリティ上の効果(アカウント)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)