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

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

推薦する

MySQL の一般的なログの概要

序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...

ウェブデザインと制作に関する科学的原則と提案の要約

<br />ネットワーク設計の分野では、アイトラッキングに関する研究が非常に盛んに行われ...

MySQL クエリの最適化: クエリが遅い原因と解決策

開発に携わっている友人、特に MySQL に関係のある友人は、非常に遅い MySQL クエリに遭遇す...

mysql 5.7.18 winx64 パスワード変更

MySQL 5.7.18 が正常にインストールされた後、バージョン 5.7 では空のパスワードでのロ...

シンプルなjQuery + CSSを使用してカスタムタグタイトルツールチップを作成します

導入シンプルな jQuery + CSS を使用して、ブラウザのデフォルトの動作を置き換えるカスタム...

Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信

関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...

Vue で Graphql インターフェースを実装する例

注意:この記事は現在取り組んでいる nestjs+graphql+serverless 合宿における...

写真とテキストによる MySQL と sqlyog のインストール チュートリアル

1. MySQL 1.1 MySQLのインストールmysql-5.5.27-winx64 ダウンロー...

JavaScript Sandboxについての簡単な説明

序文:サンドボックスといえば、私たちの頭には反射的に上の写真が思い浮かび、すぐに興味がわいてくるかも...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

MySQL の sql_mode モード例の詳細な説明

この記事では、MySQL の sql_mode モードについて例を挙げて説明します。ご参考までに、詳...

vue3でDOMをマウントするためのプラグインを書く際の問題について

vue2と比較して、vue3にはアプリの概念が追加され、vue3プロジェクトの作成も // メイン....

Node.js における npx コマンドの使用法とシナリオ分析

npx 使用チュートリアル今晩、 Vue-Cli勉強していたところ、ふと最新の@4.xxバージョンを...

WMLとは何ですか?

WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...