22

ニュースレター購読者データベースの「電子メール」フィールドに、次の内容が見つかりました: ' OR 1=1/*

SQL インジェクションであることはわかっていますが、それだけです。私はそれを少しグーグルで調べましたが、それが何を達成しようとしているのかについてはまだ明確です。これは 11 月上旬に発生しましたが、私の知る限り、その頃には停止はありませんでした。親切な方で、この男が何をしようとしていたのか教えていただけますか? 彼がやろうとしていたことを達成したかどうかを知る方法はありますか?

私はこれについてほとんど何も知らず、心配しています。:(

4

4 に答える 4

27

'OR 1=1何があってもクエリを成功させようとする試みです
/*複数行のコメントを開始しようとするため、残りのクエリは無視されます。

例は

SELECT userid 
FROM users 
WHERE username = ''OR 1=1/*' 
    AND password = ''
    AND domain = ''

ご覧のように、エスケープせずにユーザー名フィールドにデータを入力すると'、ユーザーがクエリで渡した資格情報に関係なく、システム内のすべてのユーザー ID が返され、攻撃者にアクセス権が付与される可能性があります (管理者が最初のユーザーの場合は管理者アクセスの可能性があります)。/*に real が含まれているため、クエリの残りの部分がコメント アウトされていることにも気付くでしょう'

データベースで値を確認できるということは、値がエスケープされ、特定の攻撃が成功しなかったことを意味します。ただし、他の試行が行われたかどうかを調査する必要があります。

于 2012-12-13T19:50:33.293 に答える
10

おそらく、テーブル内のすべての情報を選択することを目的としています。この種のクエリを使用する場合(たとえば、PHPで):

mysql_query("SELECT * FROM newsletter WHERE email = '$email'");

電子メール'OR1 = 1 / *は、この種のクエリを提供します。

mysql_query("SELECT * FROM newsletter WHERE email = '' OR 1=1/*");

したがって、すべての行が選択されます(1 = 1は常に真であり、クエリの残りの部分は「コメント」されているため)。しかし、それは成功しませんでした

  • クエリで使用される文字列がエスケープされている場合
  • すべてのクエリ結果をページに表示しない場合...
于 2012-12-13T19:53:47.283 に答える
5

データベース内の特定の値は、注目すべきものではありません。これは、攻撃者が既知の脆弱性を悪用する標的型攻撃ではなく、一連の標準的な攻撃に対して脆弱かどうかを確認するためにシステムをファジングした結果である可能性があります。

代わりに、アプリケーションがこれらの種類の攻撃に対して安全であることを確認することに集中する必要があります。OWASP は、このための優れたリソースです

パラメーター化されたクエリを使用してデータベースにアクセスしている場合、バックエンドでも動的 SQL を使用していない限り、SQL インジェクションに対して安全です。

これを行っていない場合は脆弱であり、すぐに解決する必要があります。

また、電子メール アドレスの何らかの検証を実行することを検討する必要があります。

于 2012-12-13T20:03:08.427 に答える