web-dev-qa-db-ja.com

ニュースレターデータベースに「OR 1 = 1 / * SQLインジェクション」が見つかりました

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

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

私はこれについて事実上何も知らず、心配しています。 :(

20

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

例は

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

'をエスケープせずにユーザー名フィールドにデータを入力すると、ユーザーがクエリで渡す資格情報に関係なく、システム内のすべてのユーザーIDが返され、攻撃者へのアクセスが許可されます最初のユーザー)。また、/*には実際の'が含まれているため、クエリの残りの部分がコメント化されていることに気付くでしょう。

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

25
Joe

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

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

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

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

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

  • クエリで使用される文字列がエスケープされている場合
  • すべてのクエリ結果をページに表示しない場合...
8
berty

データベース内の特定の値は、焦点を合わせるべきものではありません。これはおそらく、攻撃者fuzzingの結果であり、システムが 標準攻撃のセット に対して脆弱かどうかを確認します既知の脆弱性を悪用した標的型攻撃の例。

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

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

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

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

5

入力フォームでシンボルとコードの一部を使用するように制限するために、ユーザー入力に検証コードを使用するとよいでしょう。 htmlコードにphpを埋め込む場合、ハッカーがページを編集してhtmlコードに/ *を追加した場合、phpコードがコメントとして無視されないようにするために、phpコードを先頭に配置する必要があります

1
Eyosias Sahlu