私のウェブサイトのいくつかのページはSQLインジェクションに対して脆弱でした。インジェクションは、ユーザーがログインしたときにのみ機能しました。この問題を修正しました。次に、同様の問題が残っていないことを確認します。 sqlninja と sqlmap を使用してスキャンを試みましたが、どちらのプログラムにも、Webサイトのログイン詳細を提供する機能がありません。ログインセッションでインジェクションの脆弱性をスキャンできるツールはありますか?
Sqlmapにはcookieオプションがあります。
--cookie = COOKIE HTTP Cookieヘッダー
したがって、Cookieを貼り付けるだけで、ログに記録されているかのようにsqlmapを使用できます。
すべてのオプションのリストが必要な場合: https://github.com/sqlmapproject/sqlmap/wiki/Usage
より簡単な代替案をご紹介しましょう。
それはあなたのウェブサイトです。ソースコードにアクセスできます。それを見て、すべてのデータベースクエリがパラメータ化されていることを確認してください。これは、使用するツールが適切な場所で適切な注入を試みることを期待して、Webサイトをスキャンするよりもはるかに効率的です。
SQLインジェクションの問題は「修正」しません。まあ、人々はそうしますが、それは間違っています。あなたがしなければならないのは、そもそもそれらが起こらないようにすることではないことです。そのための主なツールは、@ TerryChiaが指摘しているように、 パラメーター化されたSQLステートメント です。パラメータ化されたSQLステートメントは、汎用的で完全なソリューションであるため、SQLインジェクション攻撃の防止に非常に効果的です。これは、あらゆる種類の「入力データサニテーション」よりもはるかに優れています。
SQLインジェクション攻撃が発生するのは、Webサイトがユーザー提供のデータ(フィールドの内容)をコードとして解釈しようとしているためです(SQLは結局のところプログラミング言語です)。この実装戦略は運命づけられています。本当に「修正」することはできません。この主題に関するいくつかの概念的な議論については、 この答え を参照してください。
「あなたが持っている唯一の道具がハンマーであるとき、あなたはそれらを繰り返し頭にぶつけるつもりなので、すべての問題は釘である方が良いでしょう。」パラメータ化されたSQLステートメントは、広く適用可能および効率的(従来の「動的」SQLステートメントよりも)ですが、すべてを実行できないことに注意してください ; SQLステートメントを動的に作成することが唯一のソリューションである非常にまれな特定のコンテキストがあります。しかし、これはあなたの状況ではありません-あなたはすでにそれを知っているでしょう、そして私がこの答えで書いたすべてのことも。
SQLインジェクションの「テストツール」は、決して満足できるものではありません。これらは、セキュリティを確保するためのものではなく、「ぶら下がっている果物」を攻撃するためのものです。彼らは可能なSQLインジェクションの圧倒的多数を見逃します。彼らの目的は、技術的でない攻撃者がそれでも彼が何らかのエリートレベルのハッカーであると信じることを可能にすることです。または、何千もの異なるサイトに対する攻撃の試みを自動化します。これらのツールがあなたに教えるものは一方向です:それらがあなたのサイトへの侵入に成功したなら、あなたはあなたがそのサイトを知っている非常に脆弱です。ただし、それらが失敗する場合は、何もわかりません。
それでも、「ログインセッション」システムを通過するツールを取得したい場合は(上記で説明したすべてにもかかわらず)、その方法に依存します。ログインを管理します。ほとんどのWebサイトは「ログインページ」を使用するため、クライアントで cookie value が設定されます。このCookieは「ログイン」状態を表し、「セッション」の一部と見なされるにはサーバーに送り返すだけで十分です。 SQLインジェクションテストツールを使用すると、要求に任意のCookie値を含めることができます。たとえば、 sqlninjaのドキュメント を参照してください(そのページで2番目に出現する「cookie」という単語を検索してください)。
Webslayerを使用できます。 https://www.owasp.org/index.php/Category:OWASP_Webslayer_Project 。
Webslayerは、ブルートフォース/ファズアプリケーションです。ログイン後にインジェクションを確認するには、次の手順に従います。
ブラウザーとwebscarabのようなインターセプトプロキシ(またはFirefoxの改ざんデータアドオンで十分です)が必要です。
ステップ3-7はwebslayerの標準的な動作で、チュートリアルを利用できます。 ( http://www.youtube.com/watch?v=QGNyvXIcky4 )のようなYouTubeのビデオはたくさんあります。
これは、ログインしているセッションでインジェクションの脆弱性をテストするのに役立ちます。
ほとんどの適切に作成されたWebアプリケーションには、中央のログインまたはセッション検証ロジックがあります。これらのケースで私がしていることは、コードのその部分をコメントアウトするだけです開発サーバー内。これで、すべてのツールがすべての機能にアクセスできるようになりました。
パラメーター化されたSQLステートメントは、プローブに対する唯一の信頼できる回答です。おそらくsqlmapまたはhavijは脆弱なパラメーターの特定に失敗しますが、決定的で巧妙なハッカーはそうする可能性があります。安全を確保するために、すべてのデータベースクエリを安全にサニタイズしてください。