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をインストールし、チャットルームを設定するための詳細な手順

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

推薦する

HTML のインラインブロックの空白を素早く削除する 5 つの方法

inline-block プロパティ値は、「インライン」要素のマージンとパディングを制御する必要があ...

MySQL でテーブル メタデータ ロックを待機する理由と方法

MySQL が alter table などの DDL 操作を実行すると、テーブル メタデータ ロッ...

Dockerでmysqlのルートパスワードを変更する方法

最初のステップはmysqlコンテナを作成することです docker exec -it コンテナID ...

docker コマンド例外「権限が拒否されました」の解決方法

Linuxシステムでは、dockerを新しくインストールし、次のようなコマンドを入力します。dock...

JSONデータをHTMLで表示する方法

背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...

Linuxパフォーマンス監視コマンドの簡単な紹介

システムでさまざまな IO ボトルネック、メモリ使用量の増加、CPU 使用率の増加などの問題が発生し...

CSS 境界線の長さ制御機能の実装

以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...

MySQL 8.0.17 winx64 (Navicat 付き) 手動構成バージョンのインストール チュートリアル図

1. ダウンロードアドレス: mysql-8.0.17-winx64ダウンロードして解凍する2. フ...

Docker を使用してスタンドアロン Pulsar とクラスター化された Redis をデプロイする方法 (開発アーティファクト)

目次1. はじめに: 2. ドッカー: 1 カスタムネットワーク2 展開を開始する3 ネットワークを...

例を通してMySQLの更新がテーブルをロックするかどうかを判定する

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレート...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要

今日、SQLトレーニングの質問バンクでこの質問を見ました。これは、非常に代表的なマルチテーブル変更の...

MySql エラー 1698 (28000) の解決策

1. 問題の説明: MysqlERROR1698 (28000) の解決方法、新しくインストールされ...

Linux での mysql8.018 のインストールと設定のプロセスの詳細な説明

Windowsでのインストールの紹介:こちらもご覧ください –》WindowsでのMySQL 8.0...

Javascriptを使用して滑らかな曲線を生成する方法

目次序文ベジェ曲線の紹介二次ベジェ曲線3次ベジェ曲線ベジェ曲線計算機能フィッティングアルゴリズム付録...