コンピュータ, プログラミング
SQLインジェクションとは何ですか?
ウェブ上のサイトやページ数は着実に増えています。 することができますすべての人々の発展のために撮影。 そして、初心者のWeb開発者は、多くの場合、安全でない、古いコードを使用します。 そして、それは犯罪者やハッカーのための抜け穴の多くを作成します。 彼らはされるよりも。 SQLインジェクション - 最も古典的な脆弱性のひとつ。
理論のビット
多くの人々は、ネットワーク上のサイトやサービスの大半はSQLデータベースのストレージを使用していることを知っています。 これは、 構造化照会言語 は、データの格納を制御し、管理することができます。 オラクル、MySQLの、Postgre - データベース管理システムデータベースの多くの異なるバージョンがあります。 かかわらず、名前とタイプの、彼らは同じクエリデータを使用しています。 これは、潜在的な脆弱性をあることここにあります。 開発者が要求を適切かつ安全に取り扱うために失敗した場合、攻撃者はこれを利用してデータベースにアクセスするために特別な戦術を使用して、することができます - そして、すべてのサイト管理へ。
このような状況を回避するには、適切にコードを最適化することと密接にリクエストが処理されている方法で監視する必要があります。
SQLインジェクションをチェック
ネットワークの脆弱性の存在を確立するには終了し、自動化ソフトウェアシステムの重量を有します。 しかし、手動で簡単なチェックを行うことが可能です。 これを行うには、テストサイトの1に移動し、アドレスバーにデータベースエラーが発生しようとします。 たとえば、サイト上のスクリプトは要求を処理することはできませんし、それらをトリミングしていません。
例えば、/ index.phpをそこnekiy_sayt?ID = 25
最も簡単な方法 - 引用符の後に25を入れて、要求を送信します。 エラーが発生しなかった場合は、いずれかのサイトやフィルタにすべての要求が正しく処理されている、またはその出力の設定で無効になっています。 ページが問題にリロードされる場合は、SQLインジェクションの脆弱性があります。
彼女が見つけた後、あなたはそれを取り除くしようとすることができます。
この脆弱性を実装するには、について少し知っておく必要があります SQL-クエリチームを。 そのうちの一つ - UNION。 これは、1つに、いくつかのクエリ結果をまとめました。 だから我々は、テーブルのフィールドの数を計算することができます。 例最初のクエリは次のとおりです。
- nekiy_sayt / index.phpを?ID = 25 UNION SELECT 1。
ほとんどの場合、このレコードは、エラーを生成する必要があります。 これは、フィールドの数は、彼らの正確な数を確立することが可能である1以上のオプションを選択すると、このように1に等しくないことを意味します。
- nekiy_sayt / index.phpを?ID = 25 UNION SELECT 1,2,3,4,5,6。
エラーが表示されなくなります場合には、フィールドの数を推測することを意味し、あります。
この問題に対する別の解決策もあります。 例えば、フィールドの多数 - 30、60又は100このコマンドは、GROUP BY。 これは例えば、IDのいずれかの理由に問い合わせ、グループ結果:
- 5 BY nekiy_sayt / index.phpを?ID = 25 GROUP。
エラーが受信されていない場合、フィールド5以上このように、かなり広い範囲からオプションを代入し、実際にそれらの何を計算することが可能です。
この例では、SQLインジェクション - そのサイトのテストで自分自身を試してみたい初心者のため。 刑法の別の利用可能な記事への不正なアクセスのためにそれを覚えておくことが重要です。
注射の主な種類
いくつかの実施形態ではSQLインジェクションすることにより、この脆弱性を実装します。 次の最も一般的な方法は以下のとおりです。
UNION クエリのSQL インジェクション。 このタイプの単純な例は、既に上記で検討されています。 それにより、フィルタリングされていない受信データを、検査中のエラーに実現されます。
エラー・ベースのSQLインジェクション。 名前が示すように、このタイプは、文法的に正しくない構成式を送信すると、エラーを使用しています。 その後、SQLインジェクションを行うことができ、応答ヘッダ、解析の傍受があります。
スタックは、 SQLクエリ インジェクションを。 この脆弱性は、連続した要求を実行することによって決定されます。 これは、符号の末尾に付加することを特徴とします「;」。 権限がそれを許可している場合、このアプローチは、多くの場合、データの読み書きやオペレーティングシステムの機能の実装にアクセスするために実装されています。
SQL-脆弱性を検索するためのソフトウェア
SQLインジェクションのためにそこにある、プログラムは通常2つのコンポーネントを持っている - サイトが可能な脆弱性をスキャンし、データへのアクセスを得るためにそれらを使用しています。 ほとんどすべての既知のプラットフォームのためのいくつかのツールがあります。 これらの機能は大幅にSQLインジェクションをクラックするためにウェブサイトをチェックすることが容易。
SQLMAP
ほとんどのデータベースと連携し、非常に強力なスキャナ。 これは、SQLインジェクションの実装の様々な方法をサポートしています。 それは自動的にパスワードのハッシュ割れと辞書の種類を認識する能力を持っています。 現状と機能、ファイルのアップロードやサーバからダウンロードしてください。
Linuxでのインストールは、コマンドを使用して実行されます。
- gitのクローンhttps://github.com/sqlmapproject/sqlmap.git SQLMAP-devの、
- cdsqlmap-devの/、
- ./sqlmap.py --wizard。
Windowsのコマンドラインとグラフィカル・ユーザー・インターフェースを備えたオプションとして使用可能です。
JSQLインジェクション
JSQLインジェクション - SQLの脆弱性の利用をテストするためのクロスプラットフォームのツール。 Javaで書かれ、そのシステムは、JREをインストールする必要があります。 リクエスト、POST、ヘッダ、クッキーをGET処理することができます。 これは、便利なグラフィカルインタフェースを備えています。
次のようにこのソフトウェアパッケージのインストールは次のとおりです。
wgetのhttps://github.com/`curl -sます。https://github.com/ron190/jsql-injection/releases | 「グレップ-E -o /ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] 。{1,2} [0-9] {1,2}の.jar「| ヘッド-N 1 '
打ち上げは-jar ./jsql-injection-v*.jarコマンドjavaを使用することです
SQL-脆弱性に関するテストサイトを開始するためには、トップフィールドにアドレスを入力する必要があります。 彼らは、GETとPOSTのために分離されています。 陽性の結果では、使用可能なテーブルの一覧が左側のウィンドウに表示されます。 あなたはそれらを表示し、一部の機密情報を知ることができます。
タブ管理パネルを見つけるために使用«管理ページ»。 それには特別なテンプレートを用いて自動的にシステムが特権ユーザーを記録し検索します。 彼らからは、パスワードのハッシュだけを取得することができます。 しかし、彼はプログラムのツールボックスにあります。
すべての脆弱性および注入に必要な調査を見つけた後、ツールは、サーバーがファイルに記入したり、逆に、そこからそれをダウンロードすることができます。
SQLIダンパV.7
このプログラム - SQLの脆弱性を発見し、実装するためのツールを使用して簡単にできます。 これは、国連が、いわゆるドルカスに基づいて生成されます。 彼らのリストには、インターネット上で見つけることができます。 SQLインジェクションのためのDorca - これらは、検索クエリの特殊なテンプレートです。 彼らの助けを借りて、あなたは任意の検索エンジンを介して潜在的に脆弱サイトを見つけることができます。
トレーニングのためのツール
Itsecgames.comサイト上の例では、SQLインジェクションを行い、それをテストする方法を示していますことができますツールの特別なセットがあります。 利益を得るためには、ダウンロードしてインストールする必要があります。 アーカイブは、サイトの構造であるファイルのセットが含まれています。 インストールするには、Apacheウェブサーバ、MySQLとPHPのセットの既存のシステムで必要になります。
Webサーバーのフォルダにアーカイブを解凍し、あなたはこのインストール時に入力したアドレスに行かなければならないソフトウェアを。 ユーザー登録のページ。 ここでは、あなたの情報を入力し、«作成»をクリックする必要があります。 新しい画面にユーザーを移動すると、システムはテストケースのいずれかを選択するように要求されます。 その中でも、注射、および他の多くの検査項目で説明の両方があります。
これは、SQLインジェクションタイプのGET /検索の例を検討する価値があります。 ここでは、それを選択し、«ハック»をクリックする必要があります。 ユーザーの前に表示され、動画サイトの検索文字列を模倣。 動画をソートするには長くすることができます。 しかし、唯一の10例があり、あなたがアイアンマンを入力しようとすることができます。 それはフィルム、そのサイトが動作し、それが含まれているテーブルを表示します。 今、私たちは特定の引用で、特殊文字スクリプトフィルタかどうかを確認する必要があります。 これを行うには、アドレスバーに」を追加。 " また、これは映画のタイトルの後に行われなければなりません。 このサイトは、エラーのエラーを与える:あなたのSQL構文でエラーが発生しています。 文字がまだ正しく処理されていないと述べているライン1、で」% 'の近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。 つまり、あなたのリクエストを代替しようとすることができます。 しかし、我々は最初のフィールドの数を計算する必要があります。 &アクション=サーチ - 2でhttp://testsites.com/sqli_1.php?title=Iron+Man「順序:それは引用符の後に導入されることで、このために使用されます。
このコマンドは、つまり、フィールドの数が2以上である、フィルムに関する情報が表示され、二重ハイフンは、他の要求を廃棄しなければならないサーバーに指示します。 今、私たちは、限り、エラーが印刷されていないとして、ますます重要に入れて、整理する必要があります。 最後に、それはフィールドが7になることが判明しました。
今では、ベースのうち有益な何かを得るための時間です。 少しフォームにそれをもたらし、アドレスバーに要求を変更します:)(、)(http://testsites.com/sqli_1.php?title=Iron+Man組合は1を選択し、データベースユーザーを、4、パスワード、6、 &アクション=の検索 - ユーザーからの7。 その実装の結果、簡単にオンラインサービスのいずれかを使用して、理解しやすいシンボルに変換することができますパスワードハッシュを持つ文字列を、表示していました。 Aは少し巻き起こしと、あなたがそのようなサイトの管理者として、他の誰かのエントリへのアクセスを得ることができ、ログインして、フィールド名を拾いました。
製品は、練習するの体重種注入の種類があります。 実際のサイトで、ネットワーク内のこれらのスキルのアプリケーションは犯罪であり得ることを忘れてはなりません。
インジェクションとPHP
原則として、PHPコードとユーザからの必要な処理要求の原因です。 したがって、このレベルでは、あなたは、PHPでのSQLインジェクションに対する防御を構築する必要があります。
まずは、そうする必要があり、それに基づいて、いくつかの簡単なガイドラインを与えてみましょう。
- データは常にデータベースに配置される前に処理されなければなりません。 これは、既存の式を使用するか、手動でクエリを編成することによってのいずれかで行うことができます。 ここでは、あまりにも、数値が必要な型に変換されていることを考慮に入れる必要があります。
- 回避は、さまざまな制御構造を促しました。
SQLインジェクションから保護するためにMySQLでクエリのコンパイルのルールについて今少し。
照会する任意の式を描画では、SQLキーワードからデータを分離することが重要です。
- テーブルWHERE名=ザーグSELECT * FROM。
任意のフィールドの名前なので、あなたが引用符で囲む必要がある - この構成では、システムは、ザーグがいることを考えることがあります。
- SELECT * FROMテーブルWHERE名= 'ザーグ'。
しかし、値自体は引用符が含まれている時間があります。
- SELECT * FROMテーブルWHERE名= 'コートジボワール'。
ここだけコート・dの一部を処理し、残りはチームとして認識することができ、これは、もちろん、ありません。 したがって、エラーが発生します。 そして、あなたは、スクリーニングこの種のデータを必要としています。 \ - これを行うには、バックスラッシュを使用します。
- SELECT * FROMテーブルWHERE名= '猫-dは\' コートジボワール」。
上記のすべての行を指します。 アクションが数字で行われている場合、それは任意の引用符やスラッシュは必要ありません。 しかし、彼らは強制的に目的のデータ型に導くために必要とされるべきです。
フィールド名はバッククォートで囲む必要があります勧告があります。 このシンボルは、チルダ「〜」と一緒に、キーボードの左側にあります。 これは、MySQLが正確にあなたのキーワードからフィールドの名前を区別することができることを確実にするためです。
データを使用した動的作業
非常に多くの場合、動的に生成されたクエリを使用して、データベースから任意のデータを取得します。 例えば:
- SELECT * FROMテーブルWHERE番号= '$番号'。
ここでは、変数$数は、フィールドの値を決定するものとして渡されます。 それは「コートジボワール」を取得する場合はどうなりますか? エラーが発生しました。
このトラブルを避けるためには、もちろん、あなたが「マジッククオート」設定を含めることができます。 しかし、今のデータが必要な場合と必要のない上映されます。 コードを手で書かれている場合はまた、あなたはシステム自体を割れに耐性を作成するにはもう少し時間を過ごすことができます。
スラッシュの独立した追加のためにmysql_real_escape_stringのを使用することができます。
$番号= mysql_real_escape_stringの($番号);
$年= mysql_real_escape_stringの($年);
$クエリ= "テーブルに挿入(数年、クラス)VALUES( '$番号'、 '$今年、11)"。
コードものの、ボリュームが増加し、まだ潜在的にそれははるかに安全に働くだろう。
プレースホルダ
プレースホルダ - システムは、これはあなたが特別な機能を代用する必要がある場所であることを認識しているマーカーの一種。 例えば:
$サテ= $ mysqli->準備( "SELECT地区番号からWHERE名=?");
$ Sate-> bind_param( "S"、$番号);
$ Sate->(実行)。
コードのこのセクションでは、トレーニング要求テンプレートを取り、その変数番号を結合し、それを実行します。 このアプローチは、クエリ処理とその実装を分割することができます。 したがって、それは、悪意のあるコードの使用から保存することができSQL-です。
どのような攻撃かもしれません
保護システム - 無視できない非常に重要な要素、。 もちろん、シンプルな名刺サイトは、復元するために容易になります。 そして、それは大きなポータル、サービス、フォーラムですか? あなたがセキュリティについて考えていない場合の結果は何ですか?
まず、ハッカーは、ベースの両方の整合性を破ることができるし、それを完全に削除します。 サイト管理者やホスティング事業者は、バックアップを作成していない場合や、あなたがつらい時を持つことになります。 なかでも、侵入者は、単一のサイトをクラック、同じサーバーに投稿された他に行くことができます。
次の訪問者の個人情報の盗難があります。 使い方 - すべてが唯一のハッカーの想像力によって制限されています。 しかし、いずれにしても、結果は非常に快適ではありません。 特に、財務情報が含まれている場合。
また、攻撃者は、データベースを自分でマージして、その戻りのためのお金を強要することができます。
サイト管理者に代わって誤報のユーザーは、彼らがされていない人は、も可能詐欺の事実として負の影響することができます。
結論
この記事のすべての情報は、情報提供のみを目的として提供されます。 それは脆弱性を検出したときに、自分のプロジェクトをテストし、それらに対処する必要があるのみ使用します。
SQLインジェクションを実施する方法の技術のより詳細な研究のために、実際の研究能力とSQL言語の機能を開始する必要があります。 コンパイルされたクエリ、キーワード、データタイプ、およびそれをすべての使用など。
また、PHPやHTML要素の機能の動作を理解することなく行うことはできません。 注射のための主な用途脆弱点 - アドレスライン、および様々な検索フィールド。 PHPの関数を学習、実装と機能の方法は、ミスを回避する方法を見つけ出すだろう。
多くの既製のソフトウェアツールの存在は、サイト既知の脆弱性に関する詳細な分析が可能になります。 カーリーのlinux - 最も人気のある製品の一つ。 サイトの強さの総合的な分析を行うことが可能なツールやプログラムが多数含まれているLinuxベースのオペレーティング・システムのこのイメージ。
何がサイトをハックする方法を知っておく必要がありますか? プロジェクトやウェブサイトの潜在的な脆弱性に注意する必要がある - それは非常に簡単です。 それは、支払ユーザデータが攻撃者によって侵害される可能性がオンライン決済、オンラインストアである場合は特に。
既存の情報セキュリティ担当者の専門的な研究のための基準と深さのさまざまなサイトをチェックアウトすることができます。 シンプルなHTML-注射から開始し、ソーシャルエンジニアリングやフィッシングへ。
Similar articles
Trending Now