いろいろ備忘録

雑記です。

ブラインドSQLインジェクション

SQLの実行結果がそのまま表示されないページでも
SQLインジェクションが可能な場合がある。

例えば会員登録フォームで、
「このIDはすでに使われています。」と出る時に
katoというIDのユーザがすでに居るとする。

kato'AND SUBSTR((SELECT pass FROM user WHERE id = 'admin'),1,1) = 'a'
とすると、kato'までは常に真なので、
管理者ユーザのパスワードの1文字目がaのときだけ「このIDは~」と表示される。

副問合せの結果がadminのパスワードで、それを1文字目から1文字切り出した結果が aと等しいなら、というSQL

ひとつめの1を、2や3などに増やしていくことで、パスワードの2文字目、3文字目と調べていく。

プレースホルダを使用していれば問題ないし、そもそもパスワードをハッシュ化していれば
試行に時間がかかる上にハッシュから元のパスワードを推測する工程が加わるので
攻撃の難易度は増す。