エラーインジェクション(主キー複製)攻撃原理

基本的

データ テーブルの主キーは繰り返すことができないという事実を利用して、繰り返される主キーを構築することで、データベースはエラーを報告し、エラー結果がフロントエンドに返されます。

SQL記述関数

ペットデータテーブルを例として説明します。
ここに画像の説明を挿入します

ラウンド():

[0,1) の範囲内の任意の浮動小数点数を返します。

カウント():

各グループの列行数を返します。
たとえば、テスト テーブルの行数を返します。

select count(*) from pet;

ここに画像の説明を挿入します
または、ペット テーブル内の性別が女性と男性である動物の数を返します。

select count(*) from pet group by sex;

ここに画像の説明を挿入します

床():

切り捨てて整数を取得します。

floor(0.4)//结果为0
floor(0.99999)//结果为0
floor(1.0001)//结果为1

主キーのエラー文

次のステートメントを構築することで、主キーの複製が実現されます。

select count(*) from pet group by floor(rand(0)*2);

主キーが重複する理由:
1. まず、floor(rand(0)*2) の計算結果を知る必要があります。
ここに画像の説明を挿入します
ここで、floor(rand(0)*2) の計算結果の最初の 5 桁が、0、1、1、0、1 であることがわかります。これらの 5 桁の結果は後で使用するので覚えておいてください。

2. 次に、group by ステートメントの計算プロセスを知る必要があります。
group by ステートメントを実行すると、まずメモリ上に空の仮想テーブルが作成され、select 後のフィールド名が主キーとして使用されます。この仮想テーブルの構造は、最終的な出力結果の構造と同じです。たとえば、ペット グループから年齢、性別をキーで選択するクエリを実行します。結果として得られる仮想テーブル構造は次のようになります。(年齢、性別) は仮想テーブルの主キーです。

セックス

仮想テーブルの作成後、SQL ステートメントに従ってデータが仮想テーブルに埋め込まれます。元のペットテーブルの各行に対するデータ操作は2つのステップに分かれており、最初のステップでは、group byステートメント以降のフィールドに基づいて、この行に対応するフィールド値を取得し、そのフィールド値がフィールド内で重複しているかどうかを確認します。仮想テーブル。ステップ 2 : 重複が発生した場合は、この行を重複した行でグループ化します。重複が発生しない場合は、再度グループ化した後にフィールドを取得し、この行に対応するフィールドを仮想テーブルに挿入します。

3. 最終的に、次のステートメントの実行プロセスを取得できます。
ここで、group by は列ではなく単に数値を表します。

select count(*) from pet group by floor(rand(0)*2);

①仮想テーブルpet_vを作成

Floor(rand(0)*2)(主キー、表示されません) カウント(*)

②初めてfloor(rand(0)*2)を実行すると結果は0になります。現在の行の結果に基づいて、仮想テーブル pet_v で主キーの重複が発生しているかどうかをクエリします。重複が発生していないことが判明したため、floor(rand(0)*2) が 2 回目に実行されて 1 が取得され、現在の結果が仮想テーブルに挿入されました。

Floor(rand(0)*2)(主キー、表示されません) カウント(*)
1 1

③floor(rand(0)*2)を3回目に実行し、結果1を取得します。仮想テーブルpet_vに主キーの重複が発生していないか確認してください。重複が見つかったので 1 増加しました。

Floor(rand(0)*2)(主キー、表示されません) カウント(*)
1 2

④floor(rand(0)*2)を4回目に実行し、結果0を取得します。仮想テーブルpet_vに主キーの重複が発生していないか確認してください。重複が発生していないことが判明したため、floor(rand(0)*2) を 5 回目に実行して 1 を取得し、現在の結果を仮想テーブルに挿入しました。このとき、主キーの重複が発生し、システムはエラーを報告します。

Floor(rand(0)*2)(主キー、表示されません) カウント(*)
1 2
1 1
エラー結果が生成されます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_45931661/article/details/132165628