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

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

推薦する

Docker での RocketMQ の詳細なインストールと使用

RocketMQ イメージを検索するには、Docker の hub.docker.com で検索する...

MySQLクエリ書き換えプラグインの使用

クエリ書き換えプラグインMySQL 5.7.6 以降、MySQL Server は、サーバーが実行す...

Vue が価格カレンダー効果を実現

この記事では、価格カレンダー効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

Vue 天気予報入門

この記事では、参考までに天気予報を実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

JavaScript 非同期プログラミングにおける Promise の初期の使用法の詳細な説明

1. 概要Promise オブジェクトは、ES6 で提案された非同期プログラミングの仕様です。非同期...

JavaScript オブジェクトを比較する 4 つの方法

目次序文参考比較手動比較浅い比較徹底比較要約する序文JavaScript でプリミティブ値を比較する...

MysqlチューニングExplainツールの詳細な説明と実践的な演習(推奨)

MySQL チューニング ツールの詳細な説明と実践的な演習の説明 ツールの紹介の説明 分析例の説明...

MYSQL ログとバックアップおよび復元の問題の詳細な説明

この記事では、参考までにMYSQLログとバックアップとリストアについて紹介します。具体的な内容は以下...

MySQLのinnodb_data_file_pathパラメータを変更する際の注意事項

序文innodb_data_file_path は、innodb テーブルスペース ファイルを指定す...

MySQL ストアドプロシージャとストアドファンクションの詳細な説明

1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...

ウェブページのカラーマッチングにおけるオーバーラップとソフトカラーマッチングの手法を詳しく説明

この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...

MySQLテクノロジーにおけるInnoDBロックの詳細な説明

目次序文1. ロックとは何ですか? 2. InnoDBストレージエンジンのロック2.1 ロックの種類...

CSS3はマスク連打機能を実現する

最近Bステーションでスマートアンチブロッキング弾幕と呼ばれる弾幕エフェクトを見ました。これは伝説のマ...

Vue+thinkphp5.1+axiosでファイルアップロードを実現

この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...