web-dev-qa-db-ja.com

この固有のSQLインジェクションはどのように機能しますか?

SQLインジェクションに対して脆弱なチャレンジを見つけましたが、見つけるのは非常に困難でした。このユニークなSQLはどのように機能しますか?

ログインフォームでuser=\&pass=||1#ペイロードとして、管理パネルへのアクセスに成功しました。

これが課題でした。 https://hack2learn.pw/mysql/login.php

1
Utkarsh Agrawal

問題のクエリは、おそらく次のようになります。

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と評価され、真になります。認証コードは、おそらくそのクエリの最初の結果をフェッチするか、何かが返されたかどうかをチェックして、認証します。

4
tim