データベースの基本
データベース: データベースは、順序付けられたデータのコレクションであり、通常は相互に関連する 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 を選択するユニオン#