2011-02-08 11 views

答えて

1

通常、注入を可能にするために、SQLコード構造について推測します。そう

@username=" 'blabla' or 1=1 " 
@password=" 'blabla' or 1=1 " 

:そうハッカーのようなものを注入しようとします

select count(*) from users where [email protected] and [email protected]; 

例えば、脆弱なユーザ名/パスワードの認証コードと、それはほとんどの場合のようになります結果はcount(*)が0より大きいため、ログインが受け入れられることになります。

+0

しかし、脆弱性発見ツール(人間ではない)はSQLを直接実行することはできません。Webサーバーに要求を送信するだけで、注入が失敗したかどうかを知る方法はありますか? – jxu

+0

ハッカーは創造的でなければなりません。たとえば、応答ページに「ログイン」テキストボックスが表示されていない場合は、ハックが成功したことを意味します。「脆弱性発見ツール」はハッカーと同様に機能し、すべてのシナリオをカバーすることはできません。 –

+0

しかし、ツールとして、それはページがログインページであるかどうかを決して知らない。 – jxu

0

簡単なテストでは、入力フィールドに一重引用符を入れ、mysqlエラーメッセージが戻ってくるかどうかを確認することができます。

「SQL構文にエラーがあります。正しい構文がMySQLサーバーバージョンに対応するマニュアルをチェックして、 '1'の近くで使用するようにしてください

またはphp/mysqlエラーが発生した場合共通のエラーメッセージ)、あなたは注射脆弱性があることも知っています。

一般的な「このようなユーザー名はありません」または有効な空の結果セットが戻された場合は、注入脆弱性はほとんどありません。

+0

これはプログラマティカルではありません...エラーメッセージが表示されない場合は動作しません。 – jxu

+0

>これはプログラマチックではありません。 確かです。ページのforeach入力フィールド:1)値として "\ '"を付けてフォームをポストします。 2)if(found_php_or_mysql_error()):脆弱性があります - found_php_or_mysql_error()は簡単な正規表現で実装できます – Varx

+0

これはエラーメッセージが直接出力されることに基づいていますか? – jxu

0

これらのツールの多くは、ウェブページを破壊することが知られているパラメータのリストを持っています。

  1. フォームフィールド
  2. GETのURL
  3. HTTPヘッダ

彼らのツールは通常、彼らがヒットしていることを確認するために、サイトをスパイダーします:彼らはでパラメータを挿入する複数のrequestsmでこれらのパラメータをオフに解雇しますできるだけ多くのサイトを使用してください。

悪意のあるビットの1つは、悪用可能なWebページを見つけたときを判断することです。場合によっては、Webサーバーがページを再取得するのに時間がかかるか、ページの特定の部分が若干異なる場合があります。チェックするためのもの:

  1. HTTPレスポンスコード(500サーバーエラーは、おそらくSQLが無効であることを意味し)
  2. 返されたページのサイズすべてのことを言って

を返すために、ページのために取ら

  • 時間実際にサイトのソースコードにアクセスできる場合は、静的解析技術を使用して脆弱性を探すことができます。

  • +0

    悪用可能なWebページをいつプログラム的に見つけたのかを判断することができますか? – jxu

    関連する問題