web-dev-qa-db-ja.com

SQLインジェクション-ログインバイパス

背景情報:学校のタスクとしてのSQLインジェクション。ログインバイパス。 2つの入力フィールド名とパスワードを指定します。解決ボタンで確認します。

情報私が持っているもので、見つけることができたもの:

  • パスワードを忘れている間、システムにログインするタスクであることは明らかに脆弱です(入力フィールドへのクラシック形式:name :INPUTpassword:INPUT
  • タスクページのログインIDが常に受け入れられるというヒントが提供されているため、パスワードのみを入力する必要があります(フォーム:名前: "my ID "、パスワード:[〜#〜] input [〜#〜](?))
  • サーバーが実行/エミュレートMySQL、これは、別の入力を試行中に受け取ったエラー(たとえば、「 'OR 1 = 1 "-トリック、Union-Commands、Outcommentingなど):
  • ->構造はMySQL構文エラーによって示されます:SELECT name,password FROM login WHERE name='xyz' and password='xyz'
  • ->ユニオンコマンドは、たとえば列番号エラー
  • マジッククオートがオフ(?)であるか、SQLコマンドを呼び出すことができないと思います
  • GBK文字を使用して 'を介した操作をバイパスすることもできませんでした。認識されていないようです
  • PHPコードはありません
  • ログインが成功すると、サーバーは「task solve」を返します

質問: SQLインジェクションを介して最終的にシステムに正常にログインするために、私が試す可能性は何ですか?

私が試した入力の例:

名前:myID [ヒントが示すIDです]

パスワード:' OR '1'='1

  • サーバーが「wrong answer」(ログインに失敗)を返す、mysqlエラーなし

名前:myID' OR '1'='1' --

パスワード:whatever

  • 同じ結果

名前:myID' AND NOT ('1'='2

パスワード:foo') AND name='myID' LIMIT 1 #

  • 同じ結果

エラーの例:

名前:myID' OR 1=1

パスワード:whatever

  • サーバーが「wrong answer」(ログインに失敗)を返し、入力が' 'に入力されるため、構文エラーになります
5
vmboy04

認証メカニズムはバックエンドで実装されているため、多くのセキュリティ専門家が提供する2つの主要なサービスがあります。

  • ホワイトボックスのセキュリティ評価
  • ブラックボックスのセキュリティ評価
  • グレーボックスのセキュリティ評価
  • Glass-boxのセキュリティ評価

これらのサービスの詳細については、会社、組織、およびこれらの主要なサービスが提供される方法の明白なビジネスモデルであるため、詳しく説明しませんが、技術的な理解のために、サービスの種類に依存することを考慮する必要があります。テストケースを準備する必要があります。

たとえば、ソースコードにアクセスできない場合があり、特定のエントリポイント(この場合はログインエントリ)を攻撃するための時間とリソースが与えられていても、攻撃者を止めてはなりません。入力する必要があるものはソースコードによって異なりますが、ブラックボックスのセキュリティコンサルタントとして、バックエンドとなるもののアプローチの試行錯誤の基礎を理解し、それに応じて試行を準備する必要があります。

このアプローチは非常に時間がかかりますが、Burp Suite ' Intruder 'によって自動化でき、 可能な入力のリスト を侵入者に供給して、タスクを自動化できます。君は。追加の認証バイパスは ここで説明 です。発生したエラーについては、次の項目をすべて確認してください。

  1. バックエンドログイン honeypot にアクセスしていないことを確認してください。
  2. 自動化するときに、アプリケーションがレート制限を採用していないことを確認してください。
  3. 上記に当てはまる場合は、Intruderでタイミングを調整したことを確認してください。
  4. いずれにしても、レート制限の測定が地理位置情報に基づいている場合は、 pivots を試してください。
  5. システムが「解決されたタスク」を返す場合は、侵入者の結果から grep the output を実行し、その特定のHTTP応答を調査する必要があります。または、「応答コード」を確認し、システムがすべての試行で200(ログインに成功したかどうかにかかわらず)またはエラーステージで500をスローしない場合は、302の応答を選択できます。

時々、多くのテスターは過大評価して、admin/adminが機能するか ここに提供されたリストが機能するか かどうかを確認する単純な方法を決して試みません。それも、正確なソースコードを知る必要はなく、発生するすべてのエラーから列挙してバイパスを構築しようとする試行錯誤のアプローチに依存します。両方のフィールドでadmin' or '1'='1'--を試して、リストに記載されている他のフィールドと一緒に例を確認してください。

3