SQLインジェクションに対して脆弱なチャレンジを見つけましたが、見つけるのは非常に困難でした。このユニークなSQLはどのように機能しますか?
ログインフォームでuser=\&pass=||1#
ペイロードとして、管理パネルへのアクセスに成功しました。
これが課題でした。 https://hack2learn.pw/mysql/login.php
問題のクエリは、おそらく次のようになります。
SELECT * FROM users WHERE user = '$user' AND pass = '$pass'
$user
および$pass
変数は、"
や'
を削除またはエスケープすることによってサニタイズされる可能性があります。そのため、' or '1'='1
などの標準的な攻撃は機能しません。
注入すると、次のクエリが得られます。
SELECT * FROM users WHERE user = '\' AND pass = '||1#'
クエリから'
をエスケープすると、user
が' and pass =
と比較されます(そのようなユーザーが存在しないため、これはfalse
と評価される可能性があります)。 #
はコメントの残りを切り取るコメントなので、||1#'
はOR true
と評価され、真になります。認証コードは、おそらくそのクエリの最初の結果をフェッチするか、何かが返されたかどうかをチェックして、認証します。