以下のように、同じリクエストハンドラに2つのSQLがある場合:
select count(*) from user where id={$id};
select * from user where id={$id};
パラメータ「id」はフィルタリングされていないため、SQLインジェクションを実行できます。ただし、2つのSQLが異なる列数を返すため、unionを使用しようとすると、常にsqlエラーが返されます。 '使用されたSELECTステートメントの列数は異なります。
この場合、SQLインジェクションを成功させることは可能ですか?
SQLインジェクションは、それをうまく利用できるかどうかではなく、SQLコマンドの意図を変更できるかどうかの問題です。そして、これは間違いなくここに当てはまります。
悪用可能性については、ブールベースの手法を使用できます。
123 AND EXISTS (SELECT 1 FROM mysql.user WHERE user='root' AND password LIKE '*235FBD5A943%')
したがって、ルートのパスワードハッシュが最初から始まる場合にのみ、条件*235FBD5A943
全体WHERE
が真になります。このブールベースの手法(追加条件trueまたはfalse)を使用すると、適切な文字列関数を使用して、アクセス可能な情報を読み取ることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加