2017-09-03 4 views
0

私はいくつかのWebPentestingエクササイズをしています。この1つのタスクは、SQLインジェクションを使用してこの名前とパスワードで新しいアカウントを作成する必要があるということです。 Webページには、テキスト入力ユーザー名と別のテキスト入力「パスワード」があります。私はユーザー名のテキスト入力の中に必要な文字を入力することができますが、パスワード入力の中には特定の入力を入力する必要があります。SQLインジェクションを使用してSQL構文エラーを受け取る方法は?

私は挿入クエリを挿入する必要があることを知っているが、事は私はテーブル名を知らないです。新しいユーザーを挿入するために、テーブル名を知る必要があるので、どのようにウェブにtablenameが表示されたエラーを表示するのか疑問に思っています。

エラー上映は次のようにする必要があります:文のコマンドの 予期しない終了[SELECT * FROM(テーブル名)WHERE ...]私はちょうど1文字で入力しようとした

(多分> 1つの文字が必要です)パスワードフィールド内で、エラーを表示したり、パラメータテキスト入力パスワードを削除することさえできます。しかし、SQL構文エラーは表示されません。

質問は次のとおりです。ウェブページビューにテーブル名が表示されたSQL構文エラーを表示するには、どのように悪用するのですか?

なぜ、ユーザー名フィールドには注入は機能しませんが、パスワードフィールドでは機能しますか?

答えて

0

「アプリケーション」エラー(「ユーザーが存在しない」など)とアプリケーションが失敗する実行エラー(「予期しないコマンドの終了」など)の違いを最初に理解することができます。最初のケースはセキュリティの観点からは通常問題ではありません(アプリケーションが非常に悪くプログラムされていない限り).2番目のケースはハッキングを許す可能性があります。

よくプログラミングされたWebアプリケーションでは、アプリケーションエラーのみが理想的ですが、より現実的なアプローチでは、予期しない実行エラーに対処して脆弱にならないようにします。また、アプリケーションは、ユーザ入力を実行エラーを起こさない方法で処理する必要があります。

SQLインジェクションやアプリを許可する最も厄介なケースを教えているようです(実行エラーの原因となる入力フィールドにテキストを入れるのは非常に簡単です)。実行エラーに対処しない(この場合は、内部実行メッセージをユーザーに表示します)。

Webアプリケーションの一般的な間違いは、文字列連結でSQLクエリを作成することです。そのため、文字列の値が途中で終わるように、フィールドに文字列区切り文字(')を使用するのが最も簡単な方法です。ふわふわしたWebアプリケーションでは、通常、テーブル名を含む完全なエラーメッセージを表示する実行エラーが発生します。

そこからユーザーをテーブルに挿入するSQLクエリを入力フィールドに作成すると、オンラインの例が見つかります(SQLとPHP(またはASP、Javaなど)に関する少なくとも基本的な知識が必要です) SQLインジェクションを行うために、データベースアクセスがどのように失敗するかを知る必要があるためです)。

最後に、SQLインジェクションは、正しく処理されていない入力フィールドでは機能しますが、アプリケーションのプログラミング方法によって異なります。私は両方のフィールドが動作すると思いますが、おそらくSQLクエリの最後のものなので、パスワードフィールドを使って簡単に実行できます。

関連する問題