0

つい最近、私たちのクライアントは侵入テスト会社によってサイトをテストされました。レポートでは、あるフィールドで何らかの形でSQLインジェクションが実行される可能性があると述べています。それらは、DBサーバーのバージョンと検出したいくつかのテーブルのみを示しています。

そのフィールドでSQLインジェクションを一生懸命実行しようとしましたが、関連する結果を得ることができません。そのフィールドへのSQLインジェクションの問題は私が推測することです:

  • フィールドはぼかし時にAJAXによって検証されます
  • フィールドにはJS検証があり、入力は数値のみである可能性があります(他の文字は削除されます)
  • フィールドのAJAX検証は、SQLを使用してDBに値を検出できるかどうかを尋ね、yesの場合は1を返し、そうでない場合はfalseを返します(単純SELECT 1 FROM table WHERE column = '{$value}') 。
  • 次に、検証メソッドはtrueまたはエラーメッセージを返し、これはJSON形式でフォームに返されます

このすべてのために、私はいくつかのデータを返すSQLインジェクションを実行する方法を知りません...私は挿入、更新、削除クエリを実行できることを知っているので、確かにSQLインジェクションがありますが、選択からいくつかのデータを取得する方法このフィールドとその検証方法を使用してクエリを実行しますか?

HEY GUYS! 「SQLインジェクションはありますか?」とは尋ねていません。または「SQLインジェクションは悪いことですか?」-SQLインジェクションがあり、それが非常に悪いことは知っていますが、私の質問は、上記の条件を知っている間にデータを取得するSQLインジェクションをどのように実行できるかです...

下のコメントは役に立たない...

4

2 に答える 2

4

それは明らかです:

  1. OCI8 PHP拡張機能が提供するプリペアドステートメント機能を使用していません(そうでない場合は、column = :value代わりに使用しますcolumn = '{$value}'

  2. 検証はクライアント側で行われるため、簡単にオーバーライドできます。

したがって、SQLインジェクションの脆弱性がありますさて、それは私たちが必ずしもあなたのパスワードやクレジットカード番号を盗むことができるという意味ではありません。最小限の効果は、ユーザーによって提供されたパラメーターがアプリをクラッシュさせる可能性があることであり、それは十分に悪いことです。

この注射の正確な可能性については、アプリが何をするのかさえ知らずに言うのは難しいです。通常の可能性は次のとおりです。

  • 表示されないはずの行を取得する
  • データ操作ステートメントを挿入する

アップデート:

PHPコードが何をするのか見ずに:

$value = "' UNION ALL SELECT credit_card FROM billing_info -- ";
于 2012-11-15T11:50:36.490 に答える
2

脆弱性が見つかった後、特に攻撃側が脆弱なサーバー側の検証と互換性を持たせるためにクライアント側のコードをスプーフィング/書き換える必要がある場合は、DBを完全に制御する方法を考案するのに時間がかかる可能性があります。これもおそらくセキュリティミッションの一部ではありません。実際の目標は脆弱性を見つけることであり、脆弱性を悪用することではありません。

したがって、ここでリソースを費やすことはまったく無意味です。主なポイントは、脆弱性があり、それを修正する必要があるということです。セキュリティチームがそれを悪用できなかったとしても、それは何も証明しません。より経験豊富で意欲的な無法者のチームは確かにそれを悪用することができます。特に、SQLインジェクションの脆弱性が見つかったら、それを悪用するプロセスを自動化するツールがあります。

クライアント側の変更の微妙さを理解しようとしてあまり時間をかけないでください。最も重要な部分は、堅牢なサーバー側の検証です。

また、プリペアドステートメントを使用して問題を解決します。

于 2012-11-15T12:20:57.273 に答える