Web 侵入のための SQL インジェクションの基本的な実践チュートリアル! !!

データベースの基本

データベース: データベースは、順序付けられたデータのコレクションであり、通常は相互に関連する 1 つ以上のファイルとして保存されます。ユーザーは、ファイル内のデータに対して追加、削除、変更、クエリなどの操作を実行できます。

データベースには、リレーショナル データベースと非リレーショナル データベースの 2 つの主な種類があります。

リレーショナル データベース: 作成されたテーブルと同様に、エンティティ間の関係を直感的に反映できる格納形式であり、テーブル間には複雑な関係があります。Mysql、Oracle などがあります。

非リレーショナル データベース: MongoDB、Redis など、ACID 原則への準拠を保証しない分散型非リレーショナル データ ストレージ システム。

データベース管理システムは、データベースを操作および管理するためのソフトウェアであり、データベースの作成、使用、保守に使用されます。データベースのセキュリティと整合性を確保するために、統一された方法でデータベースを管理および制御します。

増加:

INSERT INTO [TABLE_NAME] (column1、column2、column3、...columnN) 
VALUES (value1、value2、value3、...valueN);

消去:

DELETE FROM [テーブル名]
WHERE [条件];
変更:

UPDATE [テーブル名]
SET 列 1 = 値 1、列 2 = 値 2....、列 N = 値 N

チェック:

テーブル名から列 1、列 2、列 N を選択します。

並べ替えによる並べ替え。並べ替え後の数値が現在の列番号より大きい場合、エラーが報告されます。


SQLインジェクション

1. SQL インジェクションの理由: Web アプリケーションがデータベース操作のために SQL ステートメントをバックグラウンド データベースに送信するとき。ユーザーが入力したパラメータが厳密にフィルタリングされていない場合、攻撃者は特別な SQL ステートメントを作成し、それをデータベース エンジンに直接入力して実行し、データベース内のデータを取得または変更する可能性があります。

2. SQL インジェクションの本質: ユーザーが入力したデータをコードとして実行します。これは「データとコードの分離」の原則に違反します。

3. SQL インジェクションの 2 つの重要なポイント: 1. ユーザーは入力コンテンツを制御できる 2. Web アプリケーションは、ユーザーが入力したコンテンツを実行用データに取り込みます

4 番目に、SQL インジェクションの分類:

        1. 射出位置による分類:GETタイプ、POSTタイプ、ヘッドインジェクション

        2. フィードバック結果の分類: エコーあり (エラー インジェクション)、エコーなし (ブラインド インジェクション)

        3. データ型による分類: デジタル型: 入力パラメータが整数である

                                           文字タイプ: 入力パラメータは文字列です

       数値型と文字型の最大の違いは、数値型では閉じるために一重引用符が必要ないのに対し、文字列型では通常、閉じるために一重引用符が必要であることです。

五、SQLインジェクションのプロセス

        1. 注入ポイントを見つける

        2. クロージング方法の判断

        3. 検証の脆弱性

        4. 列数とエコー ビットを決定します (列数を決定するには order by を使用します)。

        5. データを取得します (データベース名を取得します。データベース名に従ってテーブル名を取得します。データベース名とテーブル名に従って列名を取得します。特定のデータを取得します)。

実際の実行:

                1. データベースの種類を問い合わせます。エラー表示により、mysql であることがすでにわかっています。

                2. 現在のシステムで使用されているデータベースの名前をクエリします。

                select * from 表名 where id = '1' Union select 1,database()#        

                3. 現在のデータベースのテーブルの内容をクエリします: information_schema クエリ テーブル名

 0' Union select 1, table_name from information_schema.tables where table_schema = 'データベース名

                4. 定式化されたテーブルのフィールド情報をクエリします: information_schema クエリフィールド情報

0'union select 1,column_name from information_schema.columns where table_name = '表名

                5. 必要な情報コンテンツをクエリします。

0' テーブル名からフィールド名 1、フィールド名 2 を選択するユニオン#

おすすめ

転載: blog.csdn.net/m0_56632799/article/details/128434097