MySQL タイムブラインドインジェクションの 5 つの遅延方法

MySQL タイムブラインドインジェクションの 5 つの遅延方法

MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解決策)

遅延注入機能

5: sleep()、benchmark(t,exp)、直積、GET_LOCK() RLIKE 正規化

寝る()

睡眠(x)
スリープ(5)を選択します。

benchmark() は式を繰り返し実行する

 ベンチマーク(t,exp)
     select benchmark(count,expr) は expr 式を count 回繰り返し実行するので、処理時間が非常に長くなり、遅延が発生します。
     たとえば、benchmark(1000000,encode("hello","good")); を選択します。
     ベンチマーク(5000000, md5('test'))を選択します。

デカルト積

デカルト積(テーブルの結合は時間のかかる操作であるため)
     AxB = A と B の要素のすべての組み合わせで構成されるセット。これは結合テーブルSELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
     テーブル名 A、テーブル名 B から * を選択します
     テーブル名 A、テーブル名 B、テーブル名 C から * を選択します
     select count(*) from table_name A, table_name B, table_name C テーブルは同じテーブルでも構いません

GET_LOCK() ロック

GET_LOCK(キー、タイムアウト)には2つの接続セッションが必要です
RELEASE_LOCK(キー) ロックが解除されているかどうか。解除されている場合は1を返す。
IS_FREE_LOCK(key) は現在の接続 ID を返し、'xxxx' という名前のロックが使用されていることを示します。
key はロックの名前、timeout はロックの待機時間です。時間内にロックが正常に取得されない場合、イベントはロールバックされます。ロックが正常に追加された場合、get_lock は 1 を返します。
このロックはアプリケーション レベルで、異なる MySQL セッション間で使用されます。これは名前ロックであり、特定のテーブル名やフィールドのロックではありません。何をロックするかは完全にアプリケーション次第です。これは排他ロックです。つまり、どのセッションがロックを保持している場合でも、他のセッションがロックを取得しようとすると失敗します。
セッションAはget_lock('test',1);を選択します。
セッションBはget_lock('test',5);を選択します。
テーブルを指定することも指定しないこともできます。ロックは接続セッションが閉じられるまで解除されません。ただし、Redis とは異なり、ロックはアクティブに解除されない限りそのまま残ります。
しかし、セッション 1 の get_lock の後は解放されません。セッション 2 は同じキーを get_lock しないか、get_lock しませんが、データに対して任意の操作を実行できます。したがって、ロックは、特定の操作を同時に 1 つの接続のみに実行できるようにするという主観的な要望にすぎません。他の接続が同じロックを追加するために get_lock を呼び出さない場合、それらの接続は影響を受けず、好きな操作を実行できます。

セッション1

セッション2

get_lock: ただし、セッション 1 の gets_lock の後は解放されません。セッション 2 は同じキーを get_lock しないか、get_lock しませんが、データに対して任意の操作を実行できます。したがって、ロックは、特定の操作を同時に 1 つの接続のみに実行できるようにするという主観的な要望にすぎません。他の接続が同じロックを追加するために get_lock を呼び出さない場合、それらの接続は影響を受けず、好きな操作を実行できます。

セッション1

セッション2

長所と短所の分析 (1) この方法はすべての列を更新する場合により効果的ですが、クエリ文もロック内で実行する必要があります。 (2) この方法では、クライアントが理由もなく切断された場合にロックが自動的に解放されるため、より優れています。Redis ロックとは異なり、ロックを追加した後に切断された場合、ロックは残ります。 (3) この方法では、特定のテーブルや特定の行ではなく、ロック内のすべての操作がロックされるため、同じキーを使用する異なる操作が同じロックを共有し、効率が低下します。 (4) クエリ文がロックの前に配置されている場合、データが古い可能性があり、更新によって、クエリ後および更新前に他のクライアントによって更新されたデータが上書きされます。

RLIKE REGEXP 正規マッチング

rpadまたはrepeatを使用して長い文字列を構築し、多くの計算を必要とするパターンを追加します。遅延の長さは repeat パラメータによって制御できます。

rpad('a',4999999,'a') を選択し、RLIKE concat(repeat('(a.*)+',30),'b');

通常の構文:
. : 任意の1文字に一致します
*: 前の文字の0個以上に一致します
[]: [] 内の任意の文字に一致します。[ab]* は、空の文字列、a、b、または任意の数の a と b からなる文字列に一致します。
^: は文字列の先頭に一致します。たとえば、^s は s または S で始まる文字列に一致します。
$: は末尾に一致します。たとえば、s$ は s で終わる文字列に一致します。
{n} : 前の文字を n 回一致します。

RPAD(文字列,長さ,パッド文字列)

長さが len 文字に達するまで、文字列 padstr で str の右側を埋め、その後 str を返します。 str が len より長い場合は、len 文字に切り捨てられます。

mysql> RPAD を選択('hi',5,'?'); -> 'hi???'

repeat(str,times)は文字列を何回もコピーする

⭐️新しい遅延機能を探しています

 concat(rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 ')、rpad(1,99999、') 、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 ')、rpad(1,99999、') 999、 'a')、rpad(1,999999、 'a')、rpad(1,999999、 'a'))rlike '(a。*)+(a。*)+(a。*)+(a。*)+(a。*)+(a。*)+(a。*)+b'

上記のコードはsleep(5)と同等である。

これで、MySQL タイム ブラインド インジェクションの 5 つの遅延方法についての記事は終了です。MySQL タイム ブラインド インジェクションの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の時間設定に関する考慮事項の詳細な要約
  • MySql クエリ期間メソッド
  • mysql 時間差計算関数
  • mysqlは昨日の日付、今日の日付、明日の日付、前の時間と次の時間の時刻を取得します
  • MySQL タイムスタンプ自動更新タイムシェアリング
  • MySQLで現在のシステム時間と日付を取得し、クエリと判断コードを容易にする
  • MySQLの日付文字列タイムスタンプ変換の詳細な説明
  • PHP MYSQLに現在の時刻を挿入する

<<:  DockerにrockerChatをインストールし、チャットルームを設定するための詳細な手順

>>:  すべてのブラウザとの完全な互換性を実現するために最適なプリセットを選択してください

推薦する

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

MySQL における一般的なランキングの問題をいくつかまとめます

序文:一部のアプリケーション シナリオでは、成績や年齢によるランキングなど、ランキングの問題が発生す...

MySQL 5.7.17 インストール グラフィック チュートリアル (Windows)

最近データベースを学び始めたのですが、とても興味深いコースだと感じていますが、含まれる内容の多くは私...

mysql data_dirの変更によって発生するエラー問題を解決する

今日は、新しく購入した Alibaba Cloud ECS 環境 (Ubuntu 16.04 LTS...

HTML で 2 列レイアウトを実装する方法の例 (左側は固定幅、右側は適応幅)

HTMLは2列レイアウトを実装し、左側は固定幅、右側は適応幅です。実装1: <スタイル>...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...

JavaScriptのプロトタイプオブジェクトを徹底的に理解しましょう

目次1. プロトタイプとは何ですか? 1.1 関数プロトタイプオブジェクト1.2 コンストラクタを使...

DockerにJava環境をインストールするための実装手順

この記事は Linux centos8 をベースにして、docker をインストールし、イメージをプ...

JVMシリーズのメモリモデルの詳細な説明

目次1. メモリモデルとランタイムデータ領域2. マインドマップと凡例3. オブジェクトはJVMから...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

MySQL で単一のデータベースまたはテーブルを復元する方法と、起こりうる落とし穴

序文:最も一般的に使用される MySQL 論理バックアップ ツールは mysqldump です。通常...

Ubuntu システムでタイムゾーンと時刻を変更する方法

Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...

iFrameは背景を覆うポップアップレイヤーとして使うのに最適です

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

JavaScript 組み込みオブジェクトの概要

目次1. 組み込みオブジェクト2. 数学オブジェクト1. Mathオブジェクトの使用2. 指定された...

MySQL データベース グループ クエリの group by ステートメントの詳細な説明

1: グループ化関数の記述順序 1 選択 ... 2 から ... 3 どこで ... 4 グループ...